dashboard MTF,EMA User Guide: Dashboard MTF EMA
Script Installation:
Copy the script code.
Go to the script window (Pine Editor) on TradingView.
Paste the code into the script window.
Save the script.
Adding the Script to the Chart:
Return to your chart on TradingView.
Look for the script in the list of available scripts.
Add the script to the chart.
Interpreting the Table:
On the right side of the chart, you will see a table labeled "EMA" with arrows.
The rows correspond to different timeframes: 5 minutes (5M), 15 minutes (15M), 1 hour (1H), 4 hours (4H), and 1 day (1D).
Understanding the Arrows:
Each row of the table has two columns: "EMA" and an arrow.
"EMA" indicates the trend of the Exponential Moving Average (EMA) for the specified period.
The arrow indicates the direction of the trend: ▲ for bullish, ▼ for bearish.
Table Colors:
The colors of the table reflect the current trend based on the comparison between fast and slow EMAs.
Blue (▲) indicates a bullish trend.
Red (▼) indicates a bearish trend.
Table Theme:
The table has a dark (Dark) or light (Light) theme according to your preference.
The background, frame, and colors are adjusted based on the selected theme.
Usage:
Use the table as a quick indicator of trends on different timeframes.
The arrows help you quickly identify trends without navigating between different time units.
Designed to simplify analysis and avoid cluttering the chart with multiple indicators.
Cari dalam skrip untuk " TABLE "
Major and Minor Trend Indicator by Nikhil34a V 2.2Title: Major and Minor Trend Indicator by Nikhil34a V 2.2
Description:
The Major and Minor Trend Indicator v2.2 is a comprehensive technical analysis script designed for use with the TradingView platform. This powerful tool is developed in Pine Script version 5 and helps traders identify potential buying and selling opportunities in the stock market.
Features:
SMA Trend Analysis: The script calculates two Simple Moving Averages (SMAs) with user-defined lengths for major and minor trends. It displays these SMAs on the chart, allowing traders to visualize the prevailing trends easily.
Surge Detection: The indicator can detect buying and selling surges based on specific conditions, such as volume, RSI, MACD, and stochastic indicators. Both Buying and Selling surges are marked in black on the chart.
Option Buy Zone Detection: The script identifies the option buy zone based on SMA crossovers, RSI, and MACD values. The buy zone is categorized as "CE Zone" or "PE Zone" and displayed in the table along with the trigger time.
Two-Day High and Low Range: The script calculates the highest high and lowest low of the previous two trading days and plots them on the chart. The area between these points is shaded in semi-transparent green and red colors.
Crossover Analysis: The script analyzes moving average crossovers on multiple timeframes (2-minute, 3-minute, and 5-minute) and displays buy and sell signals accordingly.
Trend Identification: The script identifies the major and minor trends as either bullish or bearish, providing valuable insights into the overall market sentiment.
Usage:
Customize Major and Minor SMA Periods: Adjust the lengths of major and minor SMAs through input parameters to suit your trading preferences.
Enable/Disable Moving Averages: Choose which SMAs to display on the chart by toggling the "showXMA" input options.
Set Surge and Option Buy Zone Thresholds: Modify the surgeThreshold, volumeThreshold, RSIThreshold, and StochThreshold inputs to refine the surge and buy zone detection.
Analyze Crossover Signals: Monitor the crossover signals in the table, categorized by timeframes (2-minute, 3-minute, and 5-minute).
Explore Market Bias and Distance to 2-Day High/Low: The table provides information on market bias, current price movement relative to the previous two-day high and low, and the option buy zone status.
Additional Use Cases:
Surge Indicator:
The script includes a Surge Indicator that detects sudden buying or selling surges in the market. When a buying surge is identified, the "BSurge" label will appear below the corresponding candle with black text on a white background. Similarly, a selling surge will display the "SSurge" label in white text on a black background. These indicators help traders quickly spot strong buying or selling activities that may influence their trading decisions. These surges can be used to identify sudden premium dump zones.
Option Buy Zone:
The Option Buy Zone is an essential feature that identifies potential zones for buying call options (CE Zone) or put options (PE Zone) based on specific technical conditions. The indicator evaluates SMA crossovers, RSI, and MACD values to determine the current market sentiment. When the option buy zone is triggered, the script will display the respective zone ("CE Zone" or "PE Zone") in the table, highlighted with a white background. Additionally, the time when the buy zone was triggered will be shown under the "Option Buy Zone Trigger Time" column.
Price Movement Relative to 2-Day High/Low:
The script calculates the highest high and lowest low of the previous two trading days (high2DaysAgo and low2DaysAgo) and plots these points on the chart. The area between these two points is shaded in semi-transparent green and red colors. The green region indicates the price range between the highpricetoconsider (highest high of the previous two days) and the lower value between highPreviousDay and high2DaysAgo. Similarly, the red region represents the price range between the lowpricetoconsider (lowest low of the previous two days) and the higher value between lowPreviousDay and low2DaysAgo.
Entry Time and Current Zone:
The script identifies potential entry times for trades within the option buy zone. When a valid buy zone trigger occurs, the script calculates the entryTime by adding the durationInMinutes (user-defined) to the startTime. The entryTime will be displayed in the "Entry Time" column of the table. Depending on the comparison between optionbuyzonetriggertime and entryTime, the background color of the entry time will change. If optionbuyzonetriggertime is greater than entryTime, the background color will be yellow, indicating that a new trigger has occurred before the specified duration. Otherwise, the background color will be green, suggesting that the entry time is still within the defined duration.
Current Zone Indicator:
The script further categorizes the current zone as either "CE Zone" (call option zone) or "PE Zone" (put option zone). When the market is trending upwards and the minor SMA is above the major SMA, the currentZone will be set to "CE Zone." Conversely, when the market is trending downwards and the minor SMA is below the major SMA, the currentZone will be "PE Zone." This information is displayed in the "Current Zone" column of the table.
These additional use cases empower traders with valuable insights into market trends, buying and selling surges, option buy zones, and potential entry times. Traders can combine this information with their analysis and risk management strategies to make informed and confident trading decisions.
Note:
The script is optimized for identifying trends and potential trade opportunities. It is crucial to perform additional analysis and risk management before executing any trades based on the provided signals.
Happy Trading!
Goertzel Browser [Loxx]As the financial markets become increasingly complex and data-driven, traders and analysts must leverage powerful tools to gain insights and make informed decisions. One such tool is the Goertzel Browser indicator, a sophisticated technical analysis indicator that helps identify cyclical patterns in financial data. This powerful tool is capable of detecting cyclical patterns in financial data, helping traders to make better predictions and optimize their trading strategies. With its unique combination of mathematical algorithms and advanced charting capabilities, this indicator has the potential to revolutionize the way we approach financial modeling and trading.
█ Brief Overview of the Goertzel Browser
The Goertzel Browser is a sophisticated technical analysis tool that utilizes the Goertzel algorithm to analyze and visualize cyclical components within a financial time series. By identifying these cycles and their characteristics, the indicator aims to provide valuable insights into the market's underlying price movements, which could potentially be used for making informed trading decisions.
The primary purpose of this indicator is to:
1. Detect and analyze the dominant cycles present in the price data.
2. Reconstruct and visualize the composite wave based on the detected cycles.
3. Project the composite wave into the future, providing a potential roadmap for upcoming price movements.
To achieve this, the indicator performs several tasks:
1. Detrending the price data: The indicator preprocesses the price data using various detrending techniques, such as Hodrick-Prescott filters, zero-lag moving averages, and linear regression, to remove the underlying trend and focus on the cyclical components.
2. Applying the Goertzel algorithm: The indicator applies the Goertzel algorithm to the detrended price data, identifying the dominant cycles and their characteristics, such as amplitude, phase, and cycle strength.
3. Constructing the composite wave: The indicator reconstructs the composite wave by combining the detected cycles, either by using a user-defined list of cycles or by selecting the top N cycles based on their amplitude or cycle strength.
4. Visualizing the composite wave: The indicator plots the composite wave, using solid lines for the past and dotted lines for the future projections. The color of the lines indicates whether the wave is increasing or decreasing.
5. Displaying cycle information: The indicator provides a table that displays detailed information about the detected cycles, including their rank, period, Bartel's test results, amplitude, and phase.
This indicator is a powerful tool that employs the Goertzel algorithm to analyze and visualize the cyclical components within a financial time series. By providing insights into the underlying price movements and their potential future trajectory, the indicator aims to assist traders in making more informed decisions.
█ What is the Goertzel Algorithm?
The Goertzel algorithm, named after Gerald Goertzel, is a digital signal processing technique that is used to efficiently compute individual terms of the Discrete Fourier Transform (DFT). It was first introduced in 1958, and since then, it has found various applications in the fields of engineering, mathematics, and physics.
The Goertzel algorithm is primarily used to detect specific frequency components within a digital signal, making it particularly useful in applications where only a few frequency components are of interest. The algorithm is computationally efficient, as it requires fewer calculations than the Fast Fourier Transform (FFT) when detecting a small number of frequency components. This efficiency makes the Goertzel algorithm a popular choice in applications such as:
1. Telecommunications: The Goertzel algorithm is used for decoding Dual-Tone Multi-Frequency (DTMF) signals, which are the tones generated when pressing buttons on a telephone keypad. By identifying specific frequency components, the algorithm can accurately determine which button has been pressed.
2. Audio processing: The algorithm can be used to detect specific pitches or harmonics in an audio signal, making it useful in applications like pitch detection and tuning musical instruments.
3. Vibration analysis: In the field of mechanical engineering, the Goertzel algorithm can be applied to analyze vibrations in rotating machinery, helping to identify faulty components or signs of wear.
4. Power system analysis: The algorithm can be used to measure harmonic content in power systems, allowing engineers to assess power quality and detect potential issues.
The Goertzel algorithm is used in these applications because it offers several advantages over other methods, such as the FFT:
1. Computational efficiency: The Goertzel algorithm requires fewer calculations when detecting a small number of frequency components, making it more computationally efficient than the FFT in these cases.
2. Real-time analysis: The algorithm can be implemented in a streaming fashion, allowing for real-time analysis of signals, which is crucial in applications like telecommunications and audio processing.
3. Memory efficiency: The Goertzel algorithm requires less memory than the FFT, as it only computes the frequency components of interest.
4. Precision: The algorithm is less susceptible to numerical errors compared to the FFT, ensuring more accurate results in applications where precision is essential.
The Goertzel algorithm is an efficient digital signal processing technique that is primarily used to detect specific frequency components within a signal. Its computational efficiency, real-time capabilities, and precision make it an attractive choice for various applications, including telecommunications, audio processing, vibration analysis, and power system analysis. The algorithm has been widely adopted since its introduction in 1958 and continues to be an essential tool in the fields of engineering, mathematics, and physics.
█ Goertzel Algorithm in Quantitative Finance: In-Depth Analysis and Applications
The Goertzel algorithm, initially designed for signal processing in telecommunications, has gained significant traction in the financial industry due to its efficient frequency detection capabilities. In quantitative finance, the Goertzel algorithm has been utilized for uncovering hidden market cycles, developing data-driven trading strategies, and optimizing risk management. This section delves deeper into the applications of the Goertzel algorithm in finance, particularly within the context of quantitative trading and analysis.
Unveiling Hidden Market Cycles:
Market cycles are prevalent in financial markets and arise from various factors, such as economic conditions, investor psychology, and market participant behavior. The Goertzel algorithm's ability to detect and isolate specific frequencies in price data helps trader analysts identify hidden market cycles that may otherwise go unnoticed. By examining the amplitude, phase, and periodicity of each cycle, traders can better understand the underlying market structure and dynamics, enabling them to develop more informed and effective trading strategies.
Developing Quantitative Trading Strategies:
The Goertzel algorithm's versatility allows traders to incorporate its insights into a wide range of trading strategies. By identifying the dominant market cycles in a financial instrument's price data, traders can create data-driven strategies that capitalize on the cyclical nature of markets.
For instance, a trader may develop a mean-reversion strategy that takes advantage of the identified cycles. By establishing positions when the price deviates from the predicted cycle, the trader can profit from the subsequent reversion to the cycle's mean. Similarly, a momentum-based strategy could be designed to exploit the persistence of a dominant cycle by entering positions that align with the cycle's direction.
Enhancing Risk Management:
The Goertzel algorithm plays a vital role in risk management for quantitative strategies. By analyzing the cyclical components of a financial instrument's price data, traders can gain insights into the potential risks associated with their trading strategies.
By monitoring the amplitude and phase of dominant cycles, a trader can detect changes in market dynamics that may pose risks to their positions. For example, a sudden increase in amplitude may indicate heightened volatility, prompting the trader to adjust position sizing or employ hedging techniques to protect their portfolio. Additionally, changes in phase alignment could signal a potential shift in market sentiment, necessitating adjustments to the trading strategy.
Expanding Quantitative Toolkits:
Traders can augment the Goertzel algorithm's insights by combining it with other quantitative techniques, creating a more comprehensive and sophisticated analysis framework. For example, machine learning algorithms, such as neural networks or support vector machines, could be trained on features extracted from the Goertzel algorithm to predict future price movements more accurately.
Furthermore, the Goertzel algorithm can be integrated with other technical analysis tools, such as moving averages or oscillators, to enhance their effectiveness. By applying these tools to the identified cycles, traders can generate more robust and reliable trading signals.
The Goertzel algorithm offers invaluable benefits to quantitative finance practitioners by uncovering hidden market cycles, aiding in the development of data-driven trading strategies, and improving risk management. By leveraging the insights provided by the Goertzel algorithm and integrating it with other quantitative techniques, traders can gain a deeper understanding of market dynamics and devise more effective trading strategies.
█ Indicator Inputs
src: This is the source data for the analysis, typically the closing price of the financial instrument.
detrendornot: This input determines the method used for detrending the source data. Detrending is the process of removing the underlying trend from the data to focus on the cyclical components.
The available options are:
hpsmthdt: Detrend using Hodrick-Prescott filter centered moving average.
zlagsmthdt: Detrend using zero-lag moving average centered moving average.
logZlagRegression: Detrend using logarithmic zero-lag linear regression.
hpsmth: Detrend using Hodrick-Prescott filter.
zlagsmth: Detrend using zero-lag moving average.
DT_HPper1 and DT_HPper2: These inputs define the period range for the Hodrick-Prescott filter centered moving average when detrendornot is set to hpsmthdt.
DT_ZLper1 and DT_ZLper2: These inputs define the period range for the zero-lag moving average centered moving average when detrendornot is set to zlagsmthdt.
DT_RegZLsmoothPer: This input defines the period for the zero-lag moving average used in logarithmic zero-lag linear regression when detrendornot is set to logZlagRegression.
HPsmoothPer: This input defines the period for the Hodrick-Prescott filter when detrendornot is set to hpsmth.
ZLMAsmoothPer: This input defines the period for the zero-lag moving average when detrendornot is set to zlagsmth.
MaxPer: This input sets the maximum period for the Goertzel algorithm to search for cycles.
squaredAmp: This boolean input determines whether the amplitude should be squared in the Goertzel algorithm.
useAddition: This boolean input determines whether the Goertzel algorithm should use addition for combining the cycles.
useCosine: This boolean input determines whether the Goertzel algorithm should use cosine waves instead of sine waves.
UseCycleStrength: This boolean input determines whether the Goertzel algorithm should compute the cycle strength, which is a normalized measure of the cycle's amplitude.
WindowSizePast and WindowSizeFuture: These inputs define the window size for past and future projections of the composite wave.
FilterBartels: This boolean input determines whether Bartel's test should be applied to filter out non-significant cycles.
BartNoCycles: This input sets the number of cycles to be used in Bartel's test.
BartSmoothPer: This input sets the period for the moving average used in Bartel's test.
BartSigLimit: This input sets the significance limit for Bartel's test, below which cycles are considered insignificant.
SortBartels: This boolean input determines whether the cycles should be sorted by their Bartel's test results.
UseCycleList: This boolean input determines whether a user-defined list of cycles should be used for constructing the composite wave. If set to false, the top N cycles will be used.
Cycle1, Cycle2, Cycle3, Cycle4, and Cycle5: These inputs define the user-defined list of cycles when 'UseCycleList' is set to true. If using a user-defined list, each of these inputs represents the period of a specific cycle to include in the composite wave.
StartAtCycle: This input determines the starting index for selecting the top N cycles when UseCycleList is set to false. This allows you to skip a certain number of cycles from the top before selecting the desired number of cycles.
UseTopCycles: This input sets the number of top cycles to use for constructing the composite wave when UseCycleList is set to false. The cycles are ranked based on their amplitudes or cycle strengths, depending on the UseCycleStrength input.
SubtractNoise: This boolean input determines whether to subtract the noise (remaining cycles) from the composite wave. If set to true, the composite wave will only include the top N cycles specified by UseTopCycles.
█ Exploring Auxiliary Functions
The following functions demonstrate advanced techniques for analyzing financial markets, including zero-lag moving averages, Bartels probability, detrending, and Hodrick-Prescott filtering. This section examines each function in detail, explaining their purpose, methodology, and applications in finance. We will examine how each function contributes to the overall performance and effectiveness of the indicator and how they work together to create a powerful analytical tool.
Zero-Lag Moving Average:
The zero-lag moving average function is designed to minimize the lag typically associated with moving averages. This is achieved through a two-step weighted linear regression process that emphasizes more recent data points. The function calculates a linearly weighted moving average (LWMA) on the input data and then applies another LWMA on the result. By doing this, the function creates a moving average that closely follows the price action, reducing the lag and improving the responsiveness of the indicator.
The zero-lag moving average function is used in the indicator to provide a responsive, low-lag smoothing of the input data. This function helps reduce the noise and fluctuations in the data, making it easier to identify and analyze underlying trends and patterns. By minimizing the lag associated with traditional moving averages, this function allows the indicator to react more quickly to changes in market conditions, providing timely signals and improving the overall effectiveness of the indicator.
Bartels Probability:
The Bartels probability function calculates the probability of a given cycle being significant in a time series. It uses a mathematical test called the Bartels test to assess the significance of cycles detected in the data. The function calculates coefficients for each detected cycle and computes an average amplitude and an expected amplitude. By comparing these values, the Bartels probability is derived, indicating the likelihood of a cycle's significance. This information can help in identifying and analyzing dominant cycles in financial markets.
The Bartels probability function is incorporated into the indicator to assess the significance of detected cycles in the input data. By calculating the Bartels probability for each cycle, the indicator can prioritize the most significant cycles and focus on the market dynamics that are most relevant to the current trading environment. This function enhances the indicator's ability to identify dominant market cycles, improving its predictive power and aiding in the development of effective trading strategies.
Detrend Logarithmic Zero-Lag Regression:
The detrend logarithmic zero-lag regression function is used for detrending data while minimizing lag. It combines a zero-lag moving average with a linear regression detrending method. The function first calculates the zero-lag moving average of the logarithm of input data and then applies a linear regression to remove the trend. By detrending the data, the function isolates the cyclical components, making it easier to analyze and interpret the underlying market dynamics.
The detrend logarithmic zero-lag regression function is used in the indicator to isolate the cyclical components of the input data. By detrending the data, the function enables the indicator to focus on the cyclical movements in the market, making it easier to analyze and interpret market dynamics. This function is essential for identifying cyclical patterns and understanding the interactions between different market cycles, which can inform trading decisions and enhance overall market understanding.
Bartels Cycle Significance Test:
The Bartels cycle significance test is a function that combines the Bartels probability function and the detrend logarithmic zero-lag regression function to assess the significance of detected cycles. The function calculates the Bartels probability for each cycle and stores the results in an array. By analyzing the probability values, traders and analysts can identify the most significant cycles in the data, which can be used to develop trading strategies and improve market understanding.
The Bartels cycle significance test function is integrated into the indicator to provide a comprehensive analysis of the significance of detected cycles. By combining the Bartels probability function and the detrend logarithmic zero-lag regression function, this test evaluates the significance of each cycle and stores the results in an array. The indicator can then use this information to prioritize the most significant cycles and focus on the most relevant market dynamics. This function enhances the indicator's ability to identify and analyze dominant market cycles, providing valuable insights for trading and market analysis.
Hodrick-Prescott Filter:
The Hodrick-Prescott filter is a popular technique used to separate the trend and cyclical components of a time series. The function applies a smoothing parameter to the input data and calculates a smoothed series using a two-sided filter. This smoothed series represents the trend component, which can be subtracted from the original data to obtain the cyclical component. The Hodrick-Prescott filter is commonly used in economics and finance to analyze economic data and financial market trends.
The Hodrick-Prescott filter is incorporated into the indicator to separate the trend and cyclical components of the input data. By applying the filter to the data, the indicator can isolate the trend component, which can be used to analyze long-term market trends and inform trading decisions. Additionally, the cyclical component can be used to identify shorter-term market dynamics and provide insights into potential trading opportunities. The inclusion of the Hodrick-Prescott filter adds another layer of analysis to the indicator, making it more versatile and comprehensive.
Detrending Options: Detrend Centered Moving Average:
The detrend centered moving average function provides different detrending methods, including the Hodrick-Prescott filter and the zero-lag moving average, based on the selected detrending method. The function calculates two sets of smoothed values using the chosen method and subtracts one set from the other to obtain a detrended series. By offering multiple detrending options, this function allows traders and analysts to select the most appropriate method for their specific needs and preferences.
The detrend centered moving average function is integrated into the indicator to provide users with multiple detrending options, including the Hodrick-Prescott filter and the zero-lag moving average. By offering multiple detrending methods, the indicator allows users to customize the analysis to their specific needs and preferences, enhancing the indicator's overall utility and adaptability. This function ensures that the indicator can cater to a wide range of trading styles and objectives, making it a valuable tool for a diverse group of market participants.
The auxiliary functions functions discussed in this section demonstrate the power and versatility of mathematical techniques in analyzing financial markets. By understanding and implementing these functions, traders and analysts can gain valuable insights into market dynamics, improve their trading strategies, and make more informed decisions. The combination of zero-lag moving averages, Bartels probability, detrending methods, and the Hodrick-Prescott filter provides a comprehensive toolkit for analyzing and interpreting financial data. The integration of advanced functions in a financial indicator creates a powerful and versatile analytical tool that can provide valuable insights into financial markets. By combining the zero-lag moving average,
█ In-Depth Analysis of the Goertzel Browser Code
The Goertzel Browser code is an implementation of the Goertzel Algorithm, an efficient technique to perform spectral analysis on a signal. The code is designed to detect and analyze dominant cycles within a given financial market data set. This section will provide an extremely detailed explanation of the code, its structure, functions, and intended purpose.
Function signature and input parameters:
The Goertzel Browser function accepts numerous input parameters for customization, including source data (src), the current bar (forBar), sample size (samplesize), period (per), squared amplitude flag (squaredAmp), addition flag (useAddition), cosine flag (useCosine), cycle strength flag (UseCycleStrength), past and future window sizes (WindowSizePast, WindowSizeFuture), Bartels filter flag (FilterBartels), Bartels-related parameters (BartNoCycles, BartSmoothPer, BartSigLimit), sorting flag (SortBartels), and output buffers (goeWorkPast, goeWorkFuture, cyclebuffer, amplitudebuffer, phasebuffer, cycleBartelsBuffer).
Initializing variables and arrays:
The code initializes several float arrays (goeWork1, goeWork2, goeWork3, goeWork4) with the same length as twice the period (2 * per). These arrays store intermediate results during the execution of the algorithm.
Preprocessing input data:
The input data (src) undergoes preprocessing to remove linear trends. This step enhances the algorithm's ability to focus on cyclical components in the data. The linear trend is calculated by finding the slope between the first and last values of the input data within the sample.
Iterative calculation of Goertzel coefficients:
The core of the Goertzel Browser algorithm lies in the iterative calculation of Goertzel coefficients for each frequency bin. These coefficients represent the spectral content of the input data at different frequencies. The code iterates through the range of frequencies, calculating the Goertzel coefficients using a nested loop structure.
Cycle strength computation:
The code calculates the cycle strength based on the Goertzel coefficients. This is an optional step, controlled by the UseCycleStrength flag. The cycle strength provides information on the relative influence of each cycle on the data per bar, considering both amplitude and cycle length. The algorithm computes the cycle strength either by squaring the amplitude (controlled by squaredAmp flag) or using the actual amplitude values.
Phase calculation:
The Goertzel Browser code computes the phase of each cycle, which represents the position of the cycle within the input data. The phase is calculated using the arctangent function (math.atan) based on the ratio of the imaginary and real components of the Goertzel coefficients.
Peak detection and cycle extraction:
The algorithm performs peak detection on the computed amplitudes or cycle strengths to identify dominant cycles. It stores the detected cycles in the cyclebuffer array, along with their corresponding amplitudes and phases in the amplitudebuffer and phasebuffer arrays, respectively.
Sorting cycles by amplitude or cycle strength:
The code sorts the detected cycles based on their amplitude or cycle strength in descending order. This allows the algorithm to prioritize cycles with the most significant impact on the input data.
Bartels cycle significance test:
If the FilterBartels flag is set, the code performs a Bartels cycle significance test on the detected cycles. This test determines the statistical significance of each cycle and filters out the insignificant cycles. The significant cycles are stored in the cycleBartelsBuffer array. If the SortBartels flag is set, the code sorts the significant cycles based on their Bartels significance values.
Waveform calculation:
The Goertzel Browser code calculates the waveform of the significant cycles for both past and future time windows. The past and future windows are defined by the WindowSizePast and WindowSizeFuture parameters, respectively. The algorithm uses either cosine or sine functions (controlled by the useCosine flag) to calculate the waveforms for each cycle. The useAddition flag determines whether the waveforms should be added or subtracted.
Storing waveforms in matrices:
The calculated waveforms for each cycle are stored in two matrices - goeWorkPast and goeWorkFuture. These matrices hold the waveforms for the past and future time windows, respectively. Each row in the matrices represents a time window position, and each column corresponds to a cycle.
Returning the number of cycles:
The Goertzel Browser function returns the total number of detected cycles (number_of_cycles) after processing the input data. This information can be used to further analyze the results or to visualize the detected cycles.
The Goertzel Browser code is a comprehensive implementation of the Goertzel Algorithm, specifically designed for detecting and analyzing dominant cycles within financial market data. The code offers a high level of customization, allowing users to fine-tune the algorithm based on their specific needs. The Goertzel Browser's combination of preprocessing, iterative calculations, cycle extraction, sorting, significance testing, and waveform calculation makes it a powerful tool for understanding cyclical components in financial data.
█ Generating and Visualizing Composite Waveform
The indicator calculates and visualizes the composite waveform for both past and future time windows based on the detected cycles. Here's a detailed explanation of this process:
Updating WindowSizePast and WindowSizeFuture:
The WindowSizePast and WindowSizeFuture are updated to ensure they are at least twice the MaxPer (maximum period).
Initializing matrices and arrays:
Two matrices, goeWorkPast and goeWorkFuture, are initialized to store the Goertzel results for past and future time windows. Multiple arrays are also initialized to store cycle, amplitude, phase, and Bartels information.
Preparing the source data (srcVal) array:
The source data is copied into an array, srcVal, and detrended using one of the selected methods (hpsmthdt, zlagsmthdt, logZlagRegression, hpsmth, or zlagsmth).
Goertzel function call:
The Goertzel function is called to analyze the detrended source data and extract cycle information. The output, number_of_cycles, contains the number of detected cycles.
Initializing arrays for past and future waveforms:
Three arrays, epgoertzel, goertzel, and goertzelFuture, are initialized to store the endpoint Goertzel, non-endpoint Goertzel, and future Goertzel projections, respectively.
Calculating composite waveform for past bars (goertzel array):
The past composite waveform is calculated by summing the selected cycles (either from the user-defined cycle list or the top cycles) and optionally subtracting the noise component.
Calculating composite waveform for future bars (goertzelFuture array):
The future composite waveform is calculated in a similar way as the past composite waveform.
Drawing past composite waveform (pvlines):
The past composite waveform is drawn on the chart using solid lines. The color of the lines is determined by the direction of the waveform (green for upward, red for downward).
Drawing future composite waveform (fvlines):
The future composite waveform is drawn on the chart using dotted lines. The color of the lines is determined by the direction of the waveform (fuchsia for upward, yellow for downward).
Displaying cycle information in a table (table3):
A table is created to display the cycle information, including the rank, period, Bartel value, amplitude (or cycle strength), and phase of each detected cycle.
Filling the table with cycle information:
The indicator iterates through the detected cycles and retrieves the relevant information (period, amplitude, phase, and Bartel value) from the corresponding arrays. It then fills the table with this information, displaying the values up to six decimal places.
To summarize, this indicator generates a composite waveform based on the detected cycles in the financial data. It calculates the composite waveforms for both past and future time windows and visualizes them on the chart using colored lines. Additionally, it displays detailed cycle information in a table, including the rank, period, Bartel value, amplitude (or cycle strength), and phase of each detected cycle.
█ Enhancing the Goertzel Algorithm-Based Script for Financial Modeling and Trading
The Goertzel algorithm-based script for detecting dominant cycles in financial data is a powerful tool for financial modeling and trading. It provides valuable insights into the past behavior of these cycles and potential future impact. However, as with any algorithm, there is always room for improvement. This section discusses potential enhancements to the existing script to make it even more robust and versatile for financial modeling, general trading, advanced trading, and high-frequency finance trading.
Enhancements for Financial Modeling
Data preprocessing: One way to improve the script's performance for financial modeling is to introduce more advanced data preprocessing techniques. This could include removing outliers, handling missing data, and normalizing the data to ensure consistent and accurate results.
Additional detrending and smoothing methods: Incorporating more sophisticated detrending and smoothing techniques, such as wavelet transform or empirical mode decomposition, can help improve the script's ability to accurately identify cycles and trends in the data.
Machine learning integration: Integrating machine learning techniques, such as artificial neural networks or support vector machines, can help enhance the script's predictive capabilities, leading to more accurate financial models.
Enhancements for General and Advanced Trading
Customizable indicator integration: Allowing users to integrate their own technical indicators can help improve the script's effectiveness for both general and advanced trading. By enabling the combination of the dominant cycle information with other technical analysis tools, traders can develop more comprehensive trading strategies.
Risk management and position sizing: Incorporating risk management and position sizing functionality into the script can help traders better manage their trades and control potential losses. This can be achieved by calculating the optimal position size based on the user's risk tolerance and account size.
Multi-timeframe analysis: Enhancing the script to perform multi-timeframe analysis can provide traders with a more holistic view of market trends and cycles. By identifying dominant cycles on different timeframes, traders can gain insights into the potential confluence of cycles and make better-informed trading decisions.
Enhancements for High-Frequency Finance Trading
Algorithm optimization: To ensure the script's suitability for high-frequency finance trading, optimizing the algorithm for faster execution is crucial. This can be achieved by employing efficient data structures and refining the calculation methods to minimize computational complexity.
Real-time data streaming: Integrating real-time data streaming capabilities into the script can help high-frequency traders react to market changes more quickly. By continuously updating the cycle information based on real-time market data, traders can adapt their strategies accordingly and capitalize on short-term market fluctuations.
Order execution and trade management: To fully leverage the script's capabilities for high-frequency trading, implementing functionality for automated order execution and trade management is essential. This can include features such as stop-loss and take-profit orders, trailing stops, and automated trade exit strategies.
While the existing Goertzel algorithm-based script is a valuable tool for detecting dominant cycles in financial data, there are several potential enhancements that can make it even more powerful for financial modeling, general trading, advanced trading, and high-frequency finance trading. By incorporating these improvements, the script can become a more versatile and effective tool for traders and financial analysts alike.
█ Understanding the Limitations of the Goertzel Algorithm
While the Goertzel algorithm-based script for detecting dominant cycles in financial data provides valuable insights, it is important to be aware of its limitations and drawbacks. Some of the key drawbacks of this indicator are:
Lagging nature:
As with many other technical indicators, the Goertzel algorithm-based script can suffer from lagging effects, meaning that it may not immediately react to real-time market changes. This lag can lead to late entries and exits, potentially resulting in reduced profitability or increased losses.
Parameter sensitivity:
The performance of the script can be sensitive to the chosen parameters, such as the detrending methods, smoothing techniques, and cycle detection settings. Improper parameter selection may lead to inaccurate cycle detection or increased false signals, which can negatively impact trading performance.
Complexity:
The Goertzel algorithm itself is relatively complex, making it difficult for novice traders or those unfamiliar with the concept of cycle analysis to fully understand and effectively utilize the script. This complexity can also make it challenging to optimize the script for specific trading styles or market conditions.
Overfitting risk:
As with any data-driven approach, there is a risk of overfitting when using the Goertzel algorithm-based script. Overfitting occurs when a model becomes too specific to the historical data it was trained on, leading to poor performance on new, unseen data. This can result in misleading signals and reduced trading performance.
No guarantee of future performance: While the script can provide insights into past cycles and potential future trends, it is important to remember that past performance does not guarantee future results. Market conditions can change, and relying solely on the script's predictions without considering other factors may lead to poor trading decisions.
Limited applicability: The Goertzel algorithm-based script may not be suitable for all markets, trading styles, or timeframes. Its effectiveness in detecting cycles may be limited in certain market conditions, such as during periods of extreme volatility or low liquidity.
While the Goertzel algorithm-based script offers valuable insights into dominant cycles in financial data, it is essential to consider its drawbacks and limitations when incorporating it into a trading strategy. Traders should always use the script in conjunction with other technical and fundamental analysis tools, as well as proper risk management, to make well-informed trading decisions.
█ Interpreting Results
The Goertzel Browser indicator can be interpreted by analyzing the plotted lines and the table presented alongside them. The indicator plots two lines: past and future composite waves. The past composite wave represents the composite wave of the past price data, and the future composite wave represents the projected composite wave for the next period.
The past composite wave line displays a solid line, with green indicating a bullish trend and red indicating a bearish trend. On the other hand, the future composite wave line is a dotted line with fuchsia indicating a bullish trend and yellow indicating a bearish trend.
The table presented alongside the indicator shows the top cycles with their corresponding rank, period, Bartels, amplitude or cycle strength, and phase. The amplitude is a measure of the strength of the cycle, while the phase is the position of the cycle within the data series.
Interpreting the Goertzel Browser indicator involves identifying the trend of the past and future composite wave lines and matching them with the corresponding bullish or bearish color. Additionally, traders can identify the top cycles with the highest amplitude or cycle strength and utilize them in conjunction with other technical indicators and fundamental analysis for trading decisions.
This indicator is considered a repainting indicator because the value of the indicator is calculated based on the past price data. As new price data becomes available, the indicator's value is recalculated, potentially causing the indicator's past values to change. This can create a false impression of the indicator's performance, as it may appear to have provided a profitable trading signal in the past when, in fact, that signal did not exist at the time.
The Goertzel indicator is also non-endpointed, meaning that it is not calculated up to the current bar or candle. Instead, it uses a fixed amount of historical data to calculate its values, which can make it difficult to use for real-time trading decisions. For example, if the indicator uses 100 bars of historical data to make its calculations, it cannot provide a signal until the current bar has closed and become part of the historical data. This can result in missed trading opportunities or delayed signals.
█ Conclusion
The Goertzel Browser indicator is a powerful tool for identifying and analyzing cyclical patterns in financial markets. Its ability to detect multiple cycles of varying frequencies and strengths make it a valuable addition to any trader's technical analysis toolkit. However, it is important to keep in mind that the Goertzel Browser indicator should be used in conjunction with other technical analysis tools and fundamental analysis to achieve the best results. With continued refinement and development, the Goertzel Browser indicator has the potential to become a highly effective tool for financial modeling, general trading, advanced trading, and high-frequency finance trading. Its accuracy and versatility make it a promising candidate for further research and development.
█ Footnotes
What is the Bartels Test for Cycle Significance?
The Bartels Cycle Significance Test is a statistical method that determines whether the peaks and troughs of a time series are statistically significant. The test is named after its inventor, George Bartels, who developed it in the mid-20th century.
The Bartels test is designed to analyze the cyclical components of a time series, which can help traders and analysts identify trends and cycles in financial markets. The test calculates a Bartels statistic, which measures the degree of non-randomness or autocorrelation in the time series.
The Bartels statistic is calculated by first splitting the time series into two halves and calculating the range of the peaks and troughs in each half. The test then compares these ranges using a t-test, which measures the significance of the difference between the two ranges.
If the Bartels statistic is greater than a critical value, it indicates that the peaks and troughs in the time series are non-random and that there is a significant cyclical component to the data. Conversely, if the Bartels statistic is less than the critical value, it suggests that the peaks and troughs are random and that there is no significant cyclical component.
The Bartels Cycle Significance Test is particularly useful in financial analysis because it can help traders and analysts identify significant cycles in asset prices, which can in turn inform investment decisions. However, it is important to note that the test is not perfect and can produce false signals in certain situations, particularly in noisy or volatile markets. Therefore, it is always recommended to use the test in conjunction with other technical and fundamental indicators to confirm trends and cycles.
Deep-dive into the Hodrick-Prescott Fitler
The Hodrick-Prescott (HP) filter is a statistical tool used in economics and finance to separate a time series into two components: a trend component and a cyclical component. It is a powerful tool for identifying long-term trends in economic and financial data and is widely used by economists, central banks, and financial institutions around the world.
The HP filter was first introduced in the 1990s by economists Robert Hodrick and Edward Prescott. It is a simple, two-parameter filter that separates a time series into a trend component and a cyclical component. The trend component represents the long-term behavior of the data, while the cyclical component captures the shorter-term fluctuations around the trend.
The HP filter works by minimizing the following objective function:
Minimize: (Sum of Squared Deviations) + λ (Sum of Squared Second Differences)
Where:
The first term represents the deviation of the data from the trend.
The second term represents the smoothness of the trend.
λ is a smoothing parameter that determines the degree of smoothness of the trend.
The smoothing parameter λ is typically set to a value between 100 and 1600, depending on the frequency of the data. Higher values of λ lead to a smoother trend, while lower values lead to a more volatile trend.
The HP filter has several advantages over other smoothing techniques. It is a non-parametric method, meaning that it does not make any assumptions about the underlying distribution of the data. It also allows for easy comparison of trends across different time series and can be used with data of any frequency.
However, the HP filter also has some limitations. It assumes that the trend is a smooth function, which may not be the case in some situations. It can also be sensitive to changes in the smoothing parameter λ, which may result in different trends for the same data. Additionally, the filter may produce unrealistic trends for very short time series.
Despite these limitations, the HP filter remains a valuable tool for analyzing economic and financial data. It is widely used by central banks and financial institutions to monitor long-term trends in the economy, and it can be used to identify turning points in the business cycle. The filter can also be used to analyze asset prices, exchange rates, and other financial variables.
The Hodrick-Prescott filter is a powerful tool for analyzing economic and financial data. It separates a time series into a trend component and a cyclical component, allowing for easy identification of long-term trends and turning points in the business cycle. While it has some limitations, it remains a valuable tool for economists, central banks, and financial institutions around the world.
LNL Smart TICKLNL Smart TICK
This study is mostly beneficial for intraday traders. It is basically a user-friendly "colorful" representation of the $TICK chart with highlighted $TICK extremes. This indicator also includes: a simple trend gauge that can visualize the bias for the day, cumulative tick cloud which is showing the cumulative strength of either longs & shorts on the day.
$TICK Trend Gauge
Although it is just a exponential moving average. This average (default set on 20) works quite well as an overall gauge for the day. Whenever the gauge is green (above zero), any negative $TICK values below -500 can offer great pullback opportunities. Same applies for the red gauge. 20 EMA is below zero ? Great time to fade any +500 or +1000 tick readings. Obviously the gauge can be ajdusted to any number based on personal style.
$TICK Extremes (little triangles)
These little triangles are triggered anytime $TICK jumps above or below the pre-set values of +1000 or -1000. By just simply observing the $TICK triangles during the day can tell you how much volaility or pressure there is. Sometimes there will be 20 green triangles and only 2 red ones. That obviously mean there is a strong bearish pressure. But there will be days when you are not going to see any triangles at all which can mean there is either a low volatility or the price is stuck in the indecisive market.
Cumulative $TICK Cloud
Cumulative $TICK by itself is a great study for day traders. It is basically running "counting" $TICK that is adding the previous $TICK values from previous bars. Cumulative $TICK can create a direct picture of the current market sentiment. It is not just a simple green / red line but a cloud that can really show you the depth on the $TICK. Some days, the cloud will be quite wide which is a good sign for the strength to one side, but sometimes the cloud will be so narrow it will practically disappear. This would be telling you the exact opposite - not much conviction to any side. Of course the depth as well as the color of the cloud can change during the day.
$TICK & Cumulative $TICK Tables
By just looking at these tables. You can immidiately tell the state of the current $TICK. They both can be red or green. It all depends whether the values are positive or negative. The tables are just a little visual addition to the whole $TICK study.
Hope it helps.
Swing Counter [theEccentricTrader]█ OVERVIEW
This indicator counts the number of confirmed swing high and swing low scenarios on any given candlestick chart and displays the statistics in a table, which can be repositioned and resized at the user's discretion.
█ CONCEPTS
Green and Red Candles
• A green candle is one that closes with a high price equal to or above the price it opened.
• A red candle is one that closes with a low price that is lower than the price it opened.
Swing Highs and Swing Lows
• A swing high is a green candle or series of consecutive green candles followed by a single red candle to complete the swing and form the peak.
• A swing low is a red candle or series of consecutive red candles followed by a single green candle to complete the swing and form the trough.
Peak and Trough Prices (Basic)
• The peak price of a complete swing high is the high price of either the red candle that completes the swing high or the high price of the preceding green candle, depending on which is higher.
• The trough price of a complete swing low is the low price of either the green candle that completes the swing low or the low price of the preceding red candle, depending on which is lower.
Peak and Trough Prices (Advanced)
• The advanced peak price of a complete swing high is the high price of either the red candle that completes the swing high or the high price of the highest preceding green candle high price, depending on which is higher.
• The advanced trough price of a complete swing low is the low price of either the green candle that completes the swing low or the low price of the lowest preceding red candle low price, depending on which is lower.
Green and Red Peaks and Troughs
• A green peak is one that derives its price from the green candle/s that constitute the swing high.
• A red peak is one that derives its price from the red candle that completes the swing high.
• A green trough is one that derives its price from the green candle that completes the swing low.
• A red trough is one that derives its price from the red candle/s that constitute the swing low.
Historic Peaks and Troughs
The current, or most recent, peak and trough occurrences are referred to as occurrence zero. Previous peak and trough occurrences are referred to as historic and ordered numerically from right to left, with the most recent historic peak and trough occurrences being occurrence one.
Upper Trends
• A return line uptrend is formed when the current peak price is higher than the preceding peak price.
• A downtrend is formed when the current peak price is lower than the preceding peak price.
• A double-top is formed when the current peak price is equal to the preceding peak price.
Lower Trends
• An uptrend is formed when the current trough price is higher than the preceding trough price.
• A return line downtrend is formed when the current trough price is lower than the preceding trough price.
• A double-bottom is formed when the current trough price is equal to the preceding trough price.
█ FEATURES
Inputs
• Start Date
• End Date
• Position
• Text Size
• Show Sample Period
• Show Plots
• Show Lines
Table
The table is colour coded, consists of three columns and nine rows. Blue cells denote neutral scenarios, green cells denote return line uptrend and uptrend scenarios, and red cells denote downtrend and return line downtrend scenarios.
The swing scenarios are listed in the first column with their corresponding total counts to the right, in the second column. The last row in column one, row nine, displays the sample period which can be adjusted or hidden via indicator settings.
Rows three and four in the third column of the table display the total higher peaks and higher troughs as percentages of total peaks and troughs, respectively. Rows five and six in the third column display the total lower peaks and lower troughs as percentages of total peaks and troughs, respectively. And rows seven and eight display the total double-top peaks and double-bottom troughs as percentages of total peaks and troughs, respectively.
Plots
I have added plots as a visual aid to the swing scenarios listed in the table. Green up-arrows with ‘HP’ denote higher peaks, while green up-arrows with ‘HT’ denote higher troughs. Red down-arrows with ‘LP’ denote higher peaks, while red down-arrows with ‘LT’ denote lower troughs. Similarly, blue diamonds with ‘DT’ denote double-top peaks and blue diamonds with ‘DB’ denote double-bottom troughs. These plots can be hidden via indicator settings.
Lines
I have also added green and red trendlines as a further visual aid to the swing scenarios listed in the table. Green lines denote return line uptrends (higher peaks) and uptrends (higher troughs), while red lines denote downtrends (lower peaks) and return line downtrends (lower troughs). These lines can be hidden via indicator settings.
█ HOW TO USE
This indicator is intended for research purposes and strategy development. I hope it will be useful in helping to gain a better understanding of the underlying dynamics at play on any given market and timeframe. It can, for example, give you an idea of any inherent biases such as a greater proportion of higher peaks to lower peaks. Or a greater proportion of higher troughs to lower troughs. Such information can be very useful when conducting top down analysis across multiple timeframes, or considering entry and exit methods.
What I find most fascinating about this logic, is that the number of swing highs and swing lows will always find equilibrium on each new complete wave cycle. If for example the chart begins with a swing high and ends with a swing low there will be an equal number of swing highs to swing lows. If the chart starts with a swing high and ends with a swing high there will be a difference of one between the two total values until another swing low is formed to complete the wave cycle sequence that began at start of the chart. Almost as if it was a fundamental truth of price action, although quite common sensical in many respects. As they say, what goes up must come down.
The objective logic for swing highs and swing lows I hope will form somewhat of a foundational building block for traders, researchers and developers alike. Not only does it facilitate the objective study of swing highs and swing lows it also facilitates that of ranges, trends, double trends, multi-part trends and patterns. The logic can also be used for objective anchor points. Concepts I will introduce and develop further in future publications.
█ LIMITATIONS
Some higher timeframe candles on tickers with larger lookbacks such as the DXY , do not actually contain all the open, high, low and close (OHLC) data at the beginning of the chart. Instead, they use the close price for open, high and low prices. So, while we can determine whether the close price is higher or lower than the preceding close price, there is no way of knowing what actually happened intra-bar for these candles. And by default candles that close at the same price as the open price, will be counted as green. You can avoid this problem by utilising the sample period filter.
The green and red candle calculations are based solely on differences between open and close prices, as such I have made no attempt to account for green candles that gap lower and close below the close price of the preceding candle, or red candles that gap higher and close above the close price of the preceding candle. I can only recommend using 24-hour markets, if and where possible, as there are far fewer gaps and, generally, more data to work with. Alternatively, you can replace the scenarios with your own logic to account for the gap anomalies, if you are feeling up to the challenge.
The sample size will be limited to your Trading View subscription plan. Premium users get 20,000 candles worth of data, pro+ and pro users get 10,000, and basic users get 5,000. If upgrading is currently not an option, you can always keep a rolling tally of the statistics in an excel spreadsheet or something of the like.
█ NOTES
I feel it important to address the mention of advanced peak and trough price logic. While I have introduced the concept, I have not included the logic in my script for a number of reasons. The most pertinent of which being the amount of extra work I would have to do to include it in a public release versus the actual difference it would make to the statistics. Based on my experience, there are actually only a small number of cases where the advanced peak and trough prices are different from the basic peak and trough prices. And with adequate multi-timeframe analysis any high or low prices that are not captured using basic peak and trough price logic on any given time frame, will no doubt be captured on a higher timeframe. See the example below on the 1H FOREXCOM:USDJPY chart (Figure 1), where the basic peak price logic denoted by the indicator plot does not capture what would be the advanced peak price, but on the 2H FOREXCOM:USDJPY chart (Figure 2), the basic peak logic does capture the advanced peak price from the 1H timeframe.
Figure 1.
Figure 2.
█ RAMBLINGS
“Never was there an age that placed economic interests higher than does our own. Never was the need of a scientific foundation for economic affairs felt more generally or more acutely. And never was the ability of practical men to utilize the achievements of science, in all fields of human activity, greater than in our day. If practical men, therefore, rely wholly on their own experience, and disregard our science in its present state of development, it cannot be due to a lack of serious interest or ability on their part. Nor can their disregard be the result of a haughty rejection of the deeper insight a true science would give into the circumstances and relationships determining the outcome of their activity. The cause of such remarkable indifference must not be sought elsewhere than in the present state of our science itself, in the sterility of all past endeavours to find its empirical foundations.” (Menger, 1871, p.45).
█ BIBLIOGRAPHY
Menger, C. (1871) Principles of Economics. Reprint, Auburn, Alabama: Ludwig Von Mises Institute: 2007.
ASE Additionals v1ASE Additionals is a statistics-driven indicator that combines multiple features to provide traders with valuable statistics to help their trading. This indicator offers a customizable table that includes statistics for VWAP with customizable standard deviation waves.
Per the empirical rule, the following is a schedule for what percent of volume should be traded between the standard deviation range:
+/- 1 standard deviation: 68.26% of volume should be trading within this range
+/- 2 standard deviation: 95.44% of volume should be trading within this range
+/- 3 standard deviation: 99.73% of volume should be trading within this range
+/- 4 standard deviation: 99.9937% of volume should be trading within this range
+/- 5 standard deviation: 99.999943% of volume should be trading within this range
+/- 6 standard deviation: 99.9999998% of volume should be trading within this range
The statistics table presents five different pieces of data
Volume Analyzed: Amount of contracts analyzed for the statistics
Volume Traded Inside Upper Extreme: Calculated by taking the amount of volume traded inside the Upper Extreme band divided by the total amount of contracts analyzed
Volume Traded Inside Lower Extreme: Calculated by taking the amount of volume traded inside the Lower Extreme band divided by the total amount of contracts analyzed
Given the user’s inputs, they will see the upper and lower extremes of the day. For example, if the user changed the inner st. dev input to 2, 95.44% of the volume should be traded within the inner band. If the user changed the outer st. dev input to 3, 99.73% of the volume should be traded within the outer band. Thus, statistically, 2.145% ((99.73%-95.44%)/2) of volume should be traded between the upper and lower band fill.
In the chart above, the bands are the 2nd and 3rd standard deviation inputs. We notice that out of the 151 Million Contracts , the actual percentage of volume traded in the upper extreme was 2.7% , and the actual percentage of the volume traded in the lower extreme was 3.3% . Given the empirical rule, about 2.145% of the volume should be traded in the upper extreme band, and 2.145% of the volume should be traded in the lower extreme band. Based on the statistics table, the empirical rule is true when applied to the volume-weighted average price.
The trader should recognize that statistics is all about probability and there is a margin for error, so the bands should be used as a bias, not an entry. For example, given the +/-2 and 3 standard deviations, statistically, if 2.145% of the volume is traded within the upper band extreme, you shouldn’t look for a long trade if the current price is in the band. Likewise, if 2.145% of the volume is traded within the lower band extreme, you shouldn’t look for a short trade if the current price is in the band.
Additionally, we provide traders with the Daily, Weekly, and Monthly OHLC levels. Open, High, Low, and Close are significant levels, especially on major timeframes. Once price has touched the level, the line changes from dashed/dotted to solid.
Features
VWAP Price line and standard deviation waves to analyze the equilibrium and extremes of the sessions trend
Previous Day/WEEK/Month OHLC levels provide Major timeframe key levels
Settings
VWAP Equilibrium: Turn on the VWAP line
VWAP Waves: Turn on the VWAP standard deviation waves
Inner St. Dev: Changes the inner band standard deviation to show the percentage of volume traded within
Outer St. Dev: Changes the outer band standard deviation to show the percentage of volume traded within
Upper Extreme: Change the color of the upper VWAP wave
Lower Extreme: Change the color of the lower VWAP wave
Wave Opacity: Change the opacity of the waves (0= completely transparent, 100=completely solid)
Statistics Table: Turn on or off the statistics table
Statistics Table Settings: Change the Table Color, Text Color, Text Size, and Table Position
Previous Day/Week/Month OHLC: Choose; All, Open, Close, High, Low, and the color of the levels
OHLC Level Settings: Change the OHLC label color, line style, and line width
How to Use
The VWAP price line acts as the 'Fair Value' or the 'Equilibrium' of the price session. Just as the VWAP Waves show the session's upper and lower extreme possibilities. While we can find entries from VWAP , our analysis uses it more as confirmation. OHLC levels are to be used as support and resistance levels. These levels provide us with great entry and target opportunities as they are essential and can show pivots in price action.
Tape [LucF]█ OVERVIEW
This script prints an ersatz of a trading console's "tape" section to the right of your chart. It displays the time, price and volume of each update of the chart's feed. It also calculates volume delta for the bar. As it calculates from realtime information, it will not display information on historical bars.
█ FEATURES
Calculations
Each new line in the tape displays the last price/volume update from the TradingView feed that's building your chart. These updates do not necessarily correspond to ticks from the originating broker/exchange's matching engine. Multiple broker/exchange ticks are often aggregated in one chart update.
The script first determines if price has moved up or down since the last update. The polarity of the price change, in turn, determines the polarity of the volume for that specific update. If price does not move between consecutive updates, then the last known polarity is used. Using this method, we can calculate a running volume delta accumulation for the bar, which becomes the bar's final volume delta value when the bar closes (you can inspect values of elapsed realtime bars in the Data Window or the indicator's values). Note that these values will all reset if the script re-executes because of a change in inputs or a chart refresh.
While this method of calculating volume delta is not perfect, it is currently the most precise way of calculating volume delta available on TradingView at the moment. Calculating more precise results would require scripts to have access to bid/ask levels from any chart timeframe. Charts at seconds timeframes do use exchange/broker ticks when the feeds you are using allow for it, and this indicator will run on them, but tick data is not yet available from higher timeframes, for now. Also note that the method used in this script is far superior to the intrabar inspection technique used on historical bars in my other "Delta Volume" indicators. This is because volume delta here is calculated from many more realtime updates than the available intrabars in history.
Inputs
You can use the script's inputs to configure:
• The number of lines displayed in the tape.
• If new lines appear at the top or bottom.
• If you want to hide lines with low volume.
• The precision of volume values.
• The size of the text and the colors used to highlight either the tape's text or background.
• The position where you want the tape on your chart.
• Conditions triggering three different markers.
Display
Deltas are shown at the bottom of the tape. They are reset on each bar. Time delta displays the time elapsed since the beginning of the bar, on intraday timeframes only. Contrary to the price change display by TradingView at the top left of charts, which is calculated from the close of the previous bar, the price delta in the tape is calculated from the bar's open, because that's the information used in the calculation of volume delta. The time will become orange when volume delta's polarity diverges from that of the bar. The volume delta value represents the current, cumulative value for the bar. Its color reflects its polarity.
When new realtime bars appear on the chart, a ↻ symbol will appear before the volume value in tape lines.
Markers
There are three types of markers you can choose to display:
• Marker 1 on volume bumps. A bump is defined as two consecutive and increasing/decreasing plus/minus delta volume values,
when no divergence between the polarity of delta volume and the bar occurs on the second bar.
• Marker 2 on volume delta for the bar exceeding a limit of your choice when there is no divergence between the polarity of delta volume and the bar. These trigger at the bar's close.
• Marker 3 on tape lines with volume exceeding a threshold. These trigger in realtime. Be sure to set a threshold high enough so that it doesn't generate too many alerts.
These markers will only display briefly under the bar, but another marker appears next to the relevant line in the tape.
The marker conditions are used to trigger alerts configured on the script. Alert messages will mention the marker(s) that triggered the specific alert event, along with the relevant volume value that triggered the marker. If more than one marker triggers a single alert, they will overprint under the bar, which can make it difficult to distinguish them.
For more detailed on-chart analysis of realtime volume delta, see my Delta Volume Realtime Action .
█ NOTES FOR CODERS
This script showcases two new Pine features:
• Tables, which allow Pine programmers to display tabular information in fixed locations of the chart. The tape uses this feature.
See the Pine User Manual's page on Tables for more information.
• varip -type variables which we can use to save values between realtime updates.
See the " Using `varip` variables " publication by PineCoders for more information.
Dynamic levels from higher TF: EMA, SMA, OHLC, Bollinger, Vwap[ AR ] iLevels - indicator is intended for displaying important levels from a current and higher timeframe.
The indicator hides levels if they are far from the current price . The concealment range is based on the ATR * multiplier value. This keeps the graph clean and not shrinking .
Available levels:
- EMA - 5, 10, 20, 50, 100, 200, 300, 400, 500, 1000, 2000
- SMA - 20, 50, 100, 200
- Current day - Open/High/Low/Close
- Prev day - Open/High/Low/Close
- Prev days - Historical Open/High/Low/Close
- Vwap
- Local Bollinger - upper and lower channel boundaries from current timeframe
--- Detailed description ---
Why do you need an indicator?
The indicator is designed to display the most important levels from the current and upper time frames, which are support/resistance for the price. You do not need to constantly search for the level on the upper time frame and track it on the current one. For ease of understanding, here we will assume that the main time frame is one minute, and the upper one is daily, and we are trading intraday. Of course the indicator works on any time-frame. And the most convenient moment is that the indicator automatically hides and shows levels near the current price so that the chart does not shrink (does not increase along the vertical axis). An important point - the level is calculated for the current bar, i.e. 20 bars ago most likely it was not at this value (but you can see it through the market simulation). This means that the levels move with the price change and they are always horizontal for the current bar, and not historical in general.
Benefits
Automatic hiding of levels depending on ATR
Levels from the current time frame: Bollinger, Vwap
Levels from the upper time frame: Open/High/Low/Close of the current day and Open/High/Low/Close of the previous day
Levels from the upper time frame: popular EMAs, popular EMA fibonacci, popular SMA, previous historical High/Low, if the price did not touch them
Table (summary) with levels for quick orientation
When hovering over a table/level, a tooltip appears in%
Everything can customized. Levels, colors, styles, hints - you can customize everything and make a dream indicator.
Available levels
EMA and SMA
A whole set of popular EMAs from the higher time frame: 5, 10, 20, 50, 100, 200, 300, 400, 500, 1000, 2000. Fibonacci EMAs: 13, 34, 55, 89, 144, 233
In our basic example, we add the EMA from the daily chart to the minute chart:
SMA added only the most popular: 20, 50, 100, 200
Vwap and Bollinger Bands from the current time frame
Open/High/Low/Close of the current and previous day (bar)
Open/High/Low/Close of the current (example: Current Open) and the previous bar (example: Prev Open) are requested from the higher time frame. If we use the indicator on the data of the daily chart, then we get the open/close/min/max levels of the current and the previous day. These are the usual Pivot levels that can be used as support/resistance:
Historical Open/High/Low/Close
These are the Open/High/Low/Close values of 50+ previous bars from the upper time frame. Marked as o3 (the Open value of the 3rd bar back), H55 (the High value of the 55th bar back), etc. They serve as excellent support/resistance levels, you just need to look at the upper chart to determine the significance of this level
In our example with a one-minute chart and an upper daily time frame, we can, for example, see the exact values of the historical maximum resistance or some significant support at the close of the gap.
By default, only High and Low are enabled, as they are the most significant. The summary hint contains a letter after the level - R or S, respectively, this is resistance or support.
Another good example of historical levels. On the left chart there is a daily time frame, on the right is a minute with an indicator. The indicator accurately shows the nearest historical support Low 14, 19 and 54. On the left I have highlighted them for clarity:
Lines and labels
The line is the "level". The line is the ray. It starts from the last bar and goes to the left. Since this is a ray, looking at the historical data (rewinding the chart back), it will not rescale and collapse the chart.
Label is the abbreviated name of the level, for example V (Vwap), e50 (EMA 50), or H17 (High 17). The title has been abbreviated so as not to clutter up the graph. When you hover the mouse, a tooltip appears with the full name of the level, the price and the difference in % to this level from the current price.
Settings
The indicator is very flexible and you can customize it absolutely for any needs and tasks.
Higher time frame
This is the timeframe from where the indicator requests data for most levels.
You can use different variations: minute/day, day/week, etc.
Atr Multiplier
This is the setting that allows you to decrease/increase the number of displayed levels.
It's simple - a “space” is created near the price above and below. If the level falls into this “space”, then it is displayed.
The space above is calculated as:
Price + (ATR * AtrMultiplier) and below as: Price - (ATR * AtrMultiplier)
While on the minute chart, it is optimal to use the value up to 10, on the hourly chart - up to 2-3, on the daily chart - 0.5, etc.
Line Right Shift, Label Right Shift
How many bars the levels and labels above them move from the last bar. If Line Right Shift is set to negative, the line will start at this point and go to the right side of the chart.
Show Lines ?, Show Labels?
Need to show lines or labels above them? You can turn off one option and use only the other - lines without labels or vice versa.
Show Summary table?
Summary table is a table of data that conveniently displays the full name of the levels and the price. Hover displays a tooltip with levels as a percentage.
To maximize the acceleration of the trader, the following has been done:
Levels sorted by price
The table is split in two. Green table above - levels are more expensive than the current price (possible resistance). Red table below - levels are cheaper than the current price (possible support)
Distance between tables = ATR. We quickly and easily understand the value of ATR by looking at this distance. You can compare it with the nearest bars, which will give good information.
Show ATR in Summary?
In the lower table showing the value of the current ATR. Convenient, no additional indicator needed.
Always show in Summary
A list of levels that must always be displayed on the table, even if they are far away and have not appeared. The short names of the levels are specified, separated by commas. My basic set is Open, Vwap, EMA 10, EMA 20, Bollinger High, Bollinger Low.
Always show Levels
What levels should be displayed, even if they are far away. Bollinger channels are my choice. You can add Vwap, but in some cases it will compress the graph a lot, so Vwap is only in Summary by default.
Hide labels
In order not to clutter up the graph, you can remove some of the labels. For example, Bollinger Bands have their own style and are perceived visually - a mark above the level is not needed. You can add Vwap.
Replace labels on *
Which labels need to be replaced with an asterisk so as not to clog the graph. For example, this is Vwap, which has its own style. You can hover over the star and get a tooltip for the price.
Replace ALL labels on *
You can massively replace all tags with asterisks and get information when you hover over them.
Show Prevs Open/High/Low/Close?
4 settings that allow you to show historical levels. The labels are o12, H4, L72, c8. By default, only High and Low are enabled due to their significance.
Max Prev Days - how many bars back to get historical levels. Limited by TradingView's abilities and you can get about 50-100 bars back.
Current/Prev Open/High/Low/Close?
8 settings for displaying 8 levels of the current and previous day, which are important boundaries for the price. Current Close is disabled by default, as this is the current price level and is highlighted in TradingView.
Vwap?, Local Bollinger?, Sma ?, Ema?
Vwap level, Bollinger channels and a complete list of available Ema/Sma.
The most popular ones are enabled by default.
Color/Style/Width
Visual settings for lines. All lines are divided into 7 groups. Styles are customizable for the group as a whole.
Life hacks
You can add the indicator multiple times to the chart and set each copy to different time frames. For example, you have a minute chart. You add the indicator 3 times and set each indicator to daily, hourly and 15 minute time frames. Next, you set up the styles and colors for the lines on each indicator so that you can easily distinguish them from each other. Thus, you will not miss a single important level when trading intraday.
Known Issues
The main problem is overlapping of labels and levels. Overlapping labels is difficult to solve, but work is underway.
A side issue is the visual styles of levels and labels. The main goal is to create well-visually perceptible lines so that they can be instantly identified without reading the mark. We need to create a good color scheme for the level groups.
How can the community help and improve the indicator?
Suggest ideas.
Please, write them in the comments. Suggest edits to existing functionality. Suggest solutions to problems, new features, etc.
I believe that the community's suggestions for improvement can bring the indicator to perfection.
Thanks you!
HSM TOOLS//@version=5
indicator("HSM TOOLS", overlay=true, max_lines_count=500, max_labels_count=5, max_boxes_count=500)
// General Settings Inputs
TZI = input.string (defval="UTC -4", title="Timezone Selection", options= , tooltip="Select the Timezone. ( Shifts Chart Elements )", group="Global Settings")
Timezone = TZI == "UTC -10" ? "GMT-10:00" : TZI == "UTC -7" ? "GMT-07:00" : TZI == "UTC -6" ? "GMT-06:00" : TZI == "UTC -5" ? "GMT-05:00" : TZI == "UTC -4" ? "GMT-04:00" : TZI == "UTC -3" ? "GMT-03:00" : TZI == "UTC +0" ? "GMT+00:00" : TZI == "UTC +1" ? "GMT+01:00" : TZI == "UTC +2" ? "GMT+02:00" : TZI == "UTC +3" ? "GMT+03:00" : TZI == "UTC +3:30" ? "GMT+03:30" : TZI == "UTC +4" ? "GMT+04:00" : TZI == "UTC +5" ? "GMT+05:00" : TZI == "UTC +5:30" ? "GMT+05:30" : TZI == "UTC +6" ? "GMT+06:00" : TZI == "UTC +7" ? "GMT+07:00" : TZI == "UTC +8" ? "GMT+08:00" : TZI == "UTC +9" ? "GMT+09:00" : TZI == "UTC +9:30" ? "GMT+09:30" : TZI == "UTC +10" ? "GMT+10:00" : TZI == "UTC +10:30" ? "GMT+10:30" : TZI == "UTC +11" ? "GMT+11:00" : TZI == "UTC +13" ? "GMT+13:00" : "GMT+13:45"
inputMaxInterval = input.int (31, title="Hide Indicator Above Specified Minutes", tooltip="Above 30Min, Chart Will Become Messy & Unreadable", group="Global Settings")
// Session options
ShowTSO = input.bool (true, title="Show Today's Session Only", group="Session Options", tooltip="Hide Historical Sessions")
ShowTWO = input.bool (true, title="Show Current Week's Sessions Only", group="Session Options", tooltip="Show All Sessions from the current week")
SL4W = input.bool (true, title="Show Last 4 Week Sessions", group="Session Options", tooltip="Show All Sessions from Last Four Weeks \nShould Disable Current Week Session to Work")
ShowSFill = input.bool (false, title="Show Session Highlighting", group="Session Options", tooltip="Highlights Session from Top of the Chart to Bottom")
//----------------------------------------------
// Historical Lines
ShowMOPL = input.bool (title="Midnight Historical Price Lines", defval=false, group="Historical Lines", tooltip="Shows Historical Midnight Price Lines")
MOLHist = input.bool (title="Midnight Historical Vertical Lines", defval=true, group="Historical Lines", tooltip="Shows Historical Midnight Vertical Lines")
ShowPrev = input.bool (false, title="Misc. Historical Price Lines", group="Historical Lines", tooltip="Makes Chart Cluttered, Use For Backtesting Only")
//----------------------------------------------
// Session Bool
ShowLondon = input.bool (false, "", inline="LONDON", group="Sessions", tooltip="01:00 to 05:00")
ShowNY = input.bool (false, "", inline="NY", group="Sessions", tooltip="07:00 to 10:00")
ShowLC = input.bool (false, "", inline="LC", group="Sessions", tooltip="10:00 to 12:00")
ShowPM = input.bool (false, "",inline="PM", group="Sessions", tooltip="13:00 to 16:00")
ShowAsian = input.bool (false, "",inline="ASIA2", group="Sessions", tooltip="20:00 to 00:00")
ShowFreeSesh = input.bool (false, "",inline="FREE", group="Sessions", tooltip="Custom Session")
// Session Strings
txt2 = input.string ("LONDON", title="", inline="LONDON", group="Sessions")
txt3 = input.string ("NEW YORK", title="", inline="NY", group="Sessions")
txt4 = input.string ("LDN CLOSE", title="", inline="LC", group="Sessions")
txt5 = input.string ("AFTERNOON", title="", inline="PM", group="Sessions")
txt6 = input.string ("ASIA", title="", inline="ASIA2", group="Sessions")
txt9 = input.string ("FREE SESH", title="", inline="FREE", group="Sessions")
// CBDR = input.session ('1400-2000:1234567', "", inline="CBDR", group="Sessions")
// ASIA = input.session ('2000-0000:1234567', "", inline="ASIA", group="Sessions")
// Session Times
LDNsesh = input.session ('0200-0500:1234567', "", inline="LONDON", group="Sessions")
NYsesh = input.session ('0700-1000:1234567', "", inline="NY", group="Sessions")
LCsesh = input.session ('1000-1200:1234567', "", inline="LC", group="Sessions")
PMsesh = input.session ('1300-1600:1234567', "", inline="PM", group="Sessions")
ASIA2sesh = input.session ('2000-2359:1234567', "", inline="ASIA2", group="Sessions")
FreeSesh = input.session ('0000-0000:1234567', "", inline="FREE", group="Sessions")
// Session Color
LSFC = input.color (color.new(#787b86, 90), "", inline="LONDON", group="Sessions")
NYSFC = input.color (color.new(#787b86, 90), "",inline="NY", group="Sessions")
LCSFC = input.color (color.new(#787b86, 90), "",inline="LC", group="Sessions")
PMSFC = input.color (color.new(#787b86, 90), "",inline="PM", group="Sessions")
ASFC = input.color (color.new(#787b86, 90), "",inline="ASIA2", group="Sessions")
FSFC = input.color (color.new(#787b86, 90), "",inline="FREE", group="Sessions")
//----------------------------------------------
// Vertical Line Bool
ShowMOP = input.bool (title="", defval=true, inline="MOP", group="Vertical Lines", tooltip="00:00 AM")
txt12 = input.string ("MIDNIGHT", title="", inline="MOP", group="Vertical Lines")
ShowLOP = input.bool (title="", defval=false, inline="LOP", group="Vertical Lines", tooltip="03:00 AM")
txt14 = input.string ("LONDON", title="", inline="LOP", group="Vertical Lines")
ShowNYOP = input.bool (title="", defval=true, inline="NYOP", group="Vertical Lines", tooltip="08:30 AM")
txt15 = input.string ("NEW YORK", title="", inline="NYOP", group="Vertical Lines")
ShowEOP = input.bool (title="", defval=false, inline="EOP", group="Vertical Lines", tooltip="09:30 AM")
txt16 = input.string ("EQUITIES", title="", inline="EOP", group="Vertical Lines")
// Vertical Line Color
MOPColor = input.color (color.new(#787b86, 0), "", inline="MOP", group="Vertical Lines")
LOPColor = input.color (color.rgb(0,128,128,60), "", inline="LOP", group="Vertical Lines")
NYOPColor = input.color (color.rgb(0,128,128,60), "", inline="NYOP", group="Vertical Lines")
EOPColor = input.color (color.rgb(0,128,128,60), "", inline="EOP", group="Vertical Lines")
// Vertical LineStyle
Midnight_Open_LS = input.string ("Dotted", "", options= , inline="MOP", group="Vertical Lines")
london_Open_LS = input.string ("Solid", "", options= , inline="LOP", group="Vertical Lines")
NY_Open_LS = input.string ("Solid", "", options= , inline="NYOP", group="Vertical Lines")
Equities_Open_LS = input.string ("Solid", "", options= , inline="EOP", group="Vertical Lines")
// Vertical LineWidth
Midnight_Open_LW = input.string ("1px", "", options= , inline="MOP", group="Vertical Lines")
London_Open_LW = input.string ("1px", "", options= , inline="LOP", group="Vertical Lines")
NY_Open_LW = input.string ("1px", "", options= , inline="NYOP", group="Vertical Lines")
Equities_Open_LW = input.string ("1px", "", options= , inline="EOP", group="Vertical Lines")
//----------------------------------------------
// Opening Price Bool
ShowMOPP = input.bool (title="", defval=true, inline="MOPP", group="Opening Price Lines", tooltip="00:00 AM")
txt13 = input.string ("MIDNIGHT", title="", inline="MOPP", group="Opening Price Lines")
ShowNYOPP = input.bool (title="", defval=false, inline="NYOPP", group="Opening Price Lines", tooltip="08:30 AM")
txt17 = input.string ("NEW YORK", title="", inline="NYOPP", group="Opening Price Lines")
ShowEOPP = input.bool (title="", defval=false, inline="EOPP", group="Opening Price Lines", tooltip="09:30 AM")
txt18 = input.string ("EQUITIES", title="", inline="EOPP", group="Opening Price Lines")
ShowAFTPP = input.bool (title="", defval=false, inline="AFTOPP", group="Opening Price Lines", tooltip="01:30 PM")
txt1330 = input.string ("AFTERNOON", title="", inline="AFTOPP", group="Opening Price Lines")
// Opening Price Color
MOPColP = input.color (color.new(#787b86, 0), "", inline="MOPP", group="Opening Price Lines")
NYOPColP = input.color (color.new(#787b86, 0), "", inline="NYOPP", group="Opening Price Lines")
EOPColP = input.color (color.new(#787b86, 0), "", inline="EOPP", group="Opening Price Lines")
AFTOPColP = input.color (color.new(#787b86, 0), "", inline="AFTOPP", group="Opening Price Lines")
// Opening Price LineStyle
MOPLS = input.string ("Dotted", "", options= , inline="MOPP", group="Opening Price Lines")
NYOPLS = input.string ("Dotted", "", options= , inline="NYOPP", group="Opening Price Lines")
EOPLS = input.string ("Dotted", "", options= , inline="EOPP", group="Opening Price Lines")
AFTOPLS = input.string ("Dotted", "", options= , inline="AFTOPP", group="Opening Price Lines")
// Opening Price LineWidth
i_MOPLW = input.string ("1px", "", options= , inline="MOPP", group="Opening Price Lines")
i_NYOPLW = input.string ("1px", "", options= , inline="NYOPP", group="Opening Price Lines")
i_EOPLW = input.string ("1px", "", options= , inline="EOPP", group="Opening Price Lines")
i_AFTOPLW = input.string ("1px", "", options= , inline="AFTOPP", group="Opening Price Lines")
//----------------------------------------------
// W&M Bool
ShowWeekOpen = input.bool (defval=false, title="", tooltip="Draw Weekly Open Price Line", group="HTF Opening Price Lines", inline="WO")
showMonthOpen = input.bool (defval=false, title="", tooltip="Draw Monthly Open Price Line", group="HTF Opening Price Lines", inline="MO")
// W&M String
txt19 = input.string ("WEEKLY", title="", inline="WO", group="HTF Opening Price Lines")
txt20 = input.string ("MONTHLY", title="", inline="MO", group="HTF Opening Price Lines")
// W&M Color
i_WeekOpenCol = input.color (title="", defval=color.new(#787b86, 0), group="HTF Opening Price Lines", inline="WO")
i_MonthOpenCol = input.color (title="", tooltip="", defval=color.new(#787b86, 0), group="HTF Opening Price Lines", inline="MO")
// W&M LineStyle
WOLS = input.string ("Dotted", "", options= , inline="WO", group="HTF Opening Price Lines")
MOLS = input.string ("Dotted", "", options= , inline="MO", group="HTF Opening Price Lines")
// W&M LineWidth
i_WOPLW = input.string ("1px", "", options= , inline="WO", group="HTF Opening Price Lines")
i_MONPLW = input.string ("1px", "", options= , inline="MO", group="HTF Opening Price Lines")
//----------------------------------------------
// CBDR, ASIA & FLOUT
ShowCBDR = input.bool (true, "", inline='CBDR', group="CBDR, ASIA & FLOUT")
ShowASIA = input.bool (true, "", inline='ASIA', group="CBDR, ASIA & FLOUT")
ShowFLOUT = input.bool (false, "", inline='FLOUT', group="CBDR, ASIA & FLOUT")
// Strings
txt0 = input.string ("CBDR", title="", inline="CBDR", group="CBDR, ASIA & FLOUT", tooltip="16:00 to 20:00 \nSD Increments of 1")
txt1 = input.string ("ASIA", title="", inline="ASIA", group="CBDR, ASIA & FLOUT", tooltip="20:00 to 00:00 \nSD Increments of 1")
txt7 = input.string ("FLOUT", title="", inline="FLOUT", group="CBDR, ASIA & FLOUT", tooltip="16:00 to 00:00 \nSD Increments of 0.5")
// Color
CBDRBoxCol = input.color (color.new(#787b86, 0),"", inline='CBDR', group="CBDR, ASIA & FLOUT")
ASIABoxCol = input.color (color.new(#787b86, 0), "", inline='ASIA', group="CBDR, ASIA & FLOUT")
FLOUTBoxCol = input.color (color.new(#787b86, 0),"", inline='FLOUT', group="CBDR, ASIA & FLOUT")
// Extras
box_text_cbdr = input.bool (true, "Show Text", inline="CBDR", group="CBDR, ASIA & FLOUT")
box_text_cbdr_col = input.color (color.new(color.gray, 80), "", inline="CBDR", group="CBDR, ASIA & FLOUT")
bool_cbdr_dev = input.bool (true, "SD", inline="CBDR", group="CBDR, ASIA & FLOUT")
box_text_asia = input.bool (true, "Show Text", inline="ASIA", group="CBDR, ASIA & FLOUT")
box_text_asia_col = input.color (color.new(color.gray, 80), "", inline="ASIA", group="CBDR, ASIA & FLOUT")
bool_asia_dev = input.bool (true, "SD", inline="ASIA", group="CBDR, ASIA & FLOUT")
box_text_flout = input.bool (true, "Show Text", inline="FLOUT", group="CBDR, ASIA & FLOUT")
box_text_flout_col = input.color (color.new(color.gray, 80), "", inline="FLOUT", group="CBDR, ASIA & FLOUT")
bool_flout_dev = input.bool (true, "SD", inline="FLOUT", group="CBDR, ASIA & FLOUT")
// Table
// SD Lines
ShowDevLN = input.bool (title="", defval=true, inline="DEVLN", group="Standard Deviation", tooltip="Deviation Lines")
DEVLNTXT = input.string ("SD LINES", title="", inline="DEVLN", group="Standard Deviation")
DevLNCol = input.color (color.new(#787b86, 0), "", inline="DEVLN", group="Standard Deviation")
DEVLS = input.string ("Solid", "", options= , inline="DEVLN", group="Standard Deviation")
i_DEVLW = input.string ("1px", "", options= , inline="DEVLN", group="Standard Deviation")
DEVLSS = DEVLS=="Solid" ? line.style_solid : DEVLS == "Dotted" ? line.style_dotted : line.style_dashed
DEVLW = i_DEVLW=="1px" ? 1 : i_DEVLW == "2px" ? 2 : i_DEVLW == "3px" ? 3 : i_DEVLW == "4px" ? 4 : 5
ShowDev = input.bool (false, '', inline="DEV", group="Standard Deviation")
txt8 = input.string ("SD COUNT", title="", inline="DEV", group="Standard Deviation")
SDCountCol = input.color (color.new(#787b86, 0), "", inline="DEV", group="Standard Deviation")
DevInput = input.string ("2 SD", "", options= , inline="DEV", group="Standard Deviation")
DevDirection = input.string ("Both", "", options= , inline="DEV", group="Standard Deviation", tooltip="SD Count, NULL, SD Count, SD Direction")
DevCount = DevInput == "1 SD" ? 1 : DevInput == "2 SD" ? 2 : DevInput == "3 SD" ? 3 : 4
Auto_Select = input.bool (false, "", group="Standard Deviation", inline="AUTOSD", tooltip="Auto SD Selection | Charter Content, Range Table \nMight Bug Out On Mondays" )
txtSD = input.string ("AUTO SD", "", group="Standard Deviation", inline="AUTOSD")
Tab1txtCol = input.color (color.new(#808080, 0), "", inline='AUTOSD', group="Standard Deviation")
TabOptionShow = input.string ("Show Table", "", options= , inline="AUTOSD", group="Standard Deviation")
Stats = TabOptionShow == "Show Table" ? true : false
TabOption1 = input.string ("Top Right", "", options= , inline="AUTOSD", group="Standard Deviation")
tabinp1 = TabOption1 == "Top Left" ? position.top_left : TabOption1 == "Top Center" ? position.top_center : TabOption1 == "Top Right" ? position.top_right : TabOption1 == "Middle Left" ? position.middle_left : TabOption1 == "Middle Right" ? position.middle_right : TabOption1 == "Bottom Left" ? position.bottom_left : TabOption1 == "Bottom Center" ? position.bottom_center : position.bottom_right
L_Prof = true
CellBG = color.new(#131722, 100)
//----------------------------------------------
// Day Of Week & Labels
// Label Settings Inputs
ShowLabel = input.bool (true, title="", inline="Glabel", group="Day Of Week & Labels")
txt21 = input.string ("LABEL", title="", inline="Glabel", group="Day Of Week & Labels")
LabelColor = input.color (color.rgb(0,0,0,100), "", inline="Glabel", group="Day Of Week & Labels")
LabelSizeInput = input.string ("Normal", "", options= , inline="Glabel", group="Day Of Week & Labels")
Terminusinp = input.string ("Terminus @ Current Time +1hr", "", options = , inline="Glabel", group="Day Of Week & Labels", tooltip="Select Label Size & Color & Terminus \nHistorical Price Lines needs to be toggled off for using Terminus")
ShowLabelText = input.bool (true, title="", inline="label", group="Day Of Week & Labels")
txt22 = input.string ("LABEL TEXT", title="", inline="label", group="Day Of Week & Labels")
LabelTextColor = input.color (color.new(#787b86, 0), title="", inline="label", group="Day Of Week & Labels")
LabelTextOptioninput = input.string ("Time", "", options= , inline="label", group="Day Of Week & Labels", tooltip="Choose Between Descriptive Text as Label or Time \nShow/Hide Prices on Labels")
ShowPricesBool = input.string ("Hide Prices", title="", options= , group="Day Of Week & Labels", inline="label")
ShowPrices = ShowPricesBool == "Show Prices" ? true : false
showDOW = input.bool (true, title="", inline="DOW", group="Day Of Week & Labels")
txt24 = input.string ("DAY OF WEEK", title="", inline="DOW", group="Day Of Week & Labels")
i_DOWCol = input.color (color.new(#787b86, 0), title="", inline="DOW", group="Day Of Week & Labels")
DOWTime = input.int (defval = 12, title="", inline="DOW", group="Day Of Week & Labels")
DOWLoc_inpt = input.string ("Bottom", "", options = , inline="DOW", group="Day Of Week & Labels", tooltip="DOW Color, Time Alignment, Vertical Location")
DOWLoc = DOWLoc_inpt == "Bottom" ? location.bottom : location.top
//----------------------------------------------
BIAS_M_Bool = input.bool (false, "", group="BIAS & NOTES PRECONFIG", inline="stats")
txt100 = input.string ("BIAS", title="", inline="stats", group="BIAS & NOTES PRECONFIG")
TableBG2 = color.new(#131722, 100)
Tab2txtCol = input.color (color.new(#787b86, 0), "", inline='stats', group="BIAS & NOTES PRECONFIG")
TabOption2 = input.string ("Bottom Right", "", options= , inline="stats", group="BIAS & NOTES PRECONFIG")
tabinp2 = TabOption2 == "Top Left" ? position.top_left : TabOption2 == "Top Center" ? position.top_center : TabOption2 == "Top Right" ? position.top_right : TabOption2 == "Middle Left" ? position.middle_left : TabOption2 == "Middle Right" ? position.middle_right : TabOption2 == "Bottom Left" ? position.bottom_left : TabOption2 == "Bottom Center" ? position.bottom_center : position.bottom_right
notesbool = false
NOTES_M_Bool = input.bool (true, "", group="BIAS & NOTES PRECONFIG", inline="stats2")
txt101 = input.string ("NOTES", title="", inline="stats2", group="BIAS & NOTES PRECONFIG")
Tab3txtCol = input.color (color.new(#787b86, 0), "", inline='stats2', group="BIAS & NOTES PRECONFIG")
TabOption3 = input.string ("Top Center", "", options= , inline="stats2", group="BIAS & NOTES PRECONFIG")
tabinp3 = TabOption3 == "Top Left" ? position.top_left : TabOption3 == "Top Center" ? position.top_center : TabOption3 == "Top Right" ? position.top_right : TabOption3 == "Middle Left" ? position.middle_left : TabOption3 == "Middle Right" ? position.middle_right : TabOption3 == "Bottom Left" ? position.bottom_left : TabOption3 == "Bottom Center" ? position.bottom_center : position.bottom_right
BIASbool1 = input.bool (true, '', inline="BIAS1", group="BIAS & NOTES")
txt52 = input.string ("DXY ", title="", inline="BIAS1", group="BIAS & NOTES")
BIASOption1 = input.string ("Unclear", options= , title="", inline="BIAS1", group="BIAS & NOTES")
BIASbool2 = input.bool (true, '', inline="BIAS2", group="BIAS & NOTES")
txt53 = input.string ("SPX ", title="", inline="BIAS2", group="BIAS & NOTES")
BIASOption2 = input.string ("Unclear", options= , title="", inline="BIAS2", group="BIAS & NOTES")
BIASbool3 = input.bool (true, '', inline="BIAS3", group="BIAS & NOTES")
txt54 = input.string ("DOW ", title="", inline="BIAS3", group="BIAS & NOTES")
BIASOption3 = input.string ("Unclear", options= , title="", inline="BIAS3", group="BIAS & NOTES")
BIASbool4 = input.bool (true, '', inline="BIAS4", group="BIAS & NOTES")
txt55 = input.string ("NAS ", title="", inline="BIAS4", group="BIAS & NOTES")
BIASOption4 = input.string ("Unclear", options= , title="", inline="BIAS4", group="BIAS & NOTES")
notes = input.text_area ("@hiran.invest", "Notes", group = "BIAS & NOTES")
//--------------------END OF INPUTS--------------------//
// Pre-Def
DOM = (timeframe.multiplier <= inputMaxInterval) and (timeframe.isintraday)
newDay = ta.change(dayofweek)
newWeek = ta.change(weekofyear)
newMonth = ta.change(time("M"))
transparentcol = color.rgb(255,255,255,100)
LSVLC = color.rgb(255,255,255,100)
NYSVLC = color.rgb(255,255,255,100)
PMSVLC = color.rgb(255,255,255,100)
ASVLC = color.rgb(255,255,255,100)
LSVLS = "dotted"
NYSVLS = "dotted"
PMSVLS = "dotted"
ASVLS = "dotted"
// Functions
isToday = false
if year(timenow) == year(time) and month(timenow) == month(time) and dayofmonth(timenow) == dayofmonth(time)
isToday := true
// Current Week
thisweek = year(timenow) == year(time) and weekofyear(timenow) == weekofyear(time)
LastOneWeek = year(timenow) == year(time) and weekofyear(timenow-604800000) == weekofyear(time)
LastTwoWeek = year(timenow) == year(time) and weekofyear(timenow-1209600000) == weekofyear(time)
LastThreeWeek = year(timenow) == year(time) and weekofyear(timenow-1814400000) == weekofyear(time)
LastFourWeek = year(timenow) == year(time) and weekofyear(timenow-2419200000) == weekofyear(time)
Last4Weeks = false
if thisweek == true or LastOneWeek == true or LastTwoWeek == true or LastThreeWeek == true or LastFourWeek == true
Last4Weeks := true
// Function to draw Vertical Lines
vline(Start, Color, linestyle, LineWidth) =>
line.new(x1=Start, y1=low - ta.tr, x2=Start, y2=high + ta.tr, xloc=xloc.bar_time, extend=extend.both, color=Color, style=linestyle, width=LineWidth)
// Function to convert forex pips into whole numbers
atr = ta.atr(14)
toWhole(number) =>
if syminfo.type == "forex" // This method only works on forex pairs
_return = atr < 1.0 ? (number / syminfo.mintick) / 10 : number
_return := atr >= 1.0 and atr < 100.0 and syminfo.currency == "JPY" ? _return * 100 : _return
else
number
// Function for determining the Start of a Session (taken from the Pinescript manual: www.tradingview.com )
SessionBegins(sess) =>
t = time("", sess , Timezone)
DOM and (not barstate.isfirst) and na(t ) and not na(t)
// BarIn Session
BarInSession(sess) =>
time(timeframe.period, sess, Timezone) != 0
// Label Type Logic
var SFistrue = true
if LabelTextOptioninput == "Time"
SFistrue := true
else
SFistrue := false
// Session String to int
SeshStartHour(Session) =>
math.round(str.tonumber(str.substring(Session,0,2)))
SeshStartMins(Session) =>
math.round(str.tonumber(str.substring(Session,2,4)))
SeshEndHour(Session) =>
math.round(str.tonumber(str.substring(Session,5,7)))
SeshEndMins(Session) =>
math.round(str.tonumber(str.substring(Session,7,9)))
// Time periods
CBDR = "1600-2000:1234567"
ASIA = "2000-0000:1234567"
FLOUT = "1600-0000:1234567"
midsesh = "0000-1600:1234567"
cbdrOpenTime = timestamp (Timezone, year, month, dayofmonth, SeshStartHour(CBDR), SeshStartMins(CBDR), 00)
cbdrEndTime = timestamp (Timezone, year, month, dayofmonth, SeshEndHour(CBDR), SeshEndMins(CBDR), 00)
asiaOpenTime = timestamp (Timezone, year, month, dayofmonth, SeshStartHour(ASIA), SeshStartMins(ASIA), 00)
asiaEndTime = timestamp (Timezone, year, month, dayofmonth, SeshEndHour(ASIA), SeshEndMins(ASIA), 00)+86400000
floutOpenTime = timestamp (Timezone, year, month, dayofmonth, SeshStartHour(FLOUT), SeshStartMins(FLOUT), 00)
floutEndTime = timestamp (Timezone, year, month, dayofmonth, SeshEndHour(FLOUT), SeshEndMins(FLOUT), 00)+86400000
CBDRTime = time (timeframe.period, CBDR, Timezone)
ASIATime = time (timeframe.period, ASIA, Timezone)
FLOUTTime = time (timeframe.period, FLOUT, Timezone)
LabelOnlyToday = true
// Time Periods
LondonStartTime = timestamp(Timezone, year, month, dayofmonth, SeshStartHour(LDNsesh), SeshStartMins(LDNsesh), 00)
LondonEndTime = timestamp(Timezone, year, month, dayofmonth, SeshEndHour(LDNsesh), SeshEndMins(LDNsesh), 00)
NYStartTime = timestamp(Timezone, year, month, dayofmonth, SeshStartHour(NYsesh), SeshStartMins(NYsesh), 00)
NYEndTime = timestamp(Timezone, year, month, dayofmonth, SeshEndHour(NYsesh), SeshEndMins(NYsesh), 00)
LCStartTime = timestamp(Timezone, year, month, dayofmonth, SeshStartHour(LCsesh), SeshStartMins(LCsesh), 00)
LCEndTime = timestamp(Timezone, year, month, dayofmonth, SeshEndHour(LCsesh), SeshEndMins(LCsesh), 00)
PMStartTime = timestamp(Timezone, year, month, dayofmonth, SeshStartHour(PMsesh), SeshStartMins(PMsesh), 00)
PMEndTime = timestamp(Timezone, year, month, dayofmonth, SeshEndHour(PMsesh), SeshEndMins(PMsesh), 00)
AsianStartTime = timestamp(Timezone, year, month, dayofmonth, SeshStartHour(ASIA2sesh), SeshStartMins(ASIA2sesh), 00)
AsianEndTime = timestamp(Timezone, year, month, dayofmonth, SeshEndHour(ASIA2sesh), SeshEndMins(ASIA2sesh), 00)
FreeStartTime = timestamp(Timezone, year, month, dayofmonth, SeshStartHour(FreeSesh), SeshStartMins(FreeSesh), 00)
FreeEndTime = timestamp(Timezone, year, month, dayofmonth, SeshEndHour(FreeSesh), SeshEndMins(FreeSesh), 00)
MidnightOpenTime = timestamp(Timezone, year, month, dayofmonth, 0, 0, 00)
CLEANUPTIME = timestamp(Timezone, year, month, dayofmonth, 0, 0, 00) - 16200000
LondonOpenTime = timestamp(Timezone, year, month, dayofmonth, 3, 0, 00)
NYOpenTime = timestamp(Timezone, year, month, dayofmonth, 8, 30, 00)
EquitiesOpenTime = timestamp(Timezone, year, month, dayofmonth, 9, 30, 00)
AfternoonOpenTime = timestamp(Timezone, year, month, dayofmonth, 13, 30, 00)
tMidnight = time("1", "0000-0001:1234567", Timezone)
// Cleanup - Remove old drawing objects
Cleanup(days) =>
// Delete old drawing objects
// One day is 86400000 milliseconds
removal_timestamp = (CLEANUPTIME) - (days * 86400000) // Remove every drawing object older than the start of the Today's Midnight
a_allLines = line.all
a_allLabels = label.all
a_allboxes = box.all
// Remove old lines
if array.size(a_allLines) > 0
for i = 0 to array.size(a_allLines) - 1
line_x2 = line.get_x2(array.get(a_allLines, i))
if line_x2 < (removal_timestamp)
line.delete(array.get(a_allLines, i))
// Remove old labels
if array.size(a_allLabels) > 0
for i = 0 to array.size(a_allLabels) - 1
label_x = label.get_x(array.get(a_allLabels, i))
if label_x < removal_timestamp
label.delete(array.get(a_allLabels, i))
// Remove old boxes
if array.size(a_allboxes) > 0
for i = 0 to array.size(a_allboxes) - 1
box_x = box.get_right(array.get(a_allboxes, i))
if box_x < (removal_timestamp - 86400000)
box.delete(array.get(a_allboxes, i))
// End of Cleanup function
// Terminus Function
Terminus(Terminus_Inp)=>
if Terminus_Inp == "Terminus @ Current Time"
_return = timenow
else if Terminus_Inp == "Terminus @ Current Time +15min"
_return = timenow + 900000
else if Terminus_Inp == "Terminus @ Current Time +30min"
_return = timenow + 1800000
else if Terminus_Inp == "Terminus @ Current Time +45min"
_return = timenow + 2700000
else if Terminus_Inp == "Terminus @ Current Time +1hr"
_return = timenow + 3600000
else if Terminus_Inp == "Terminus @ Current Time +2hr"
_return = timenow + 7200000
else
_return = timenow + 10800000
// Linestyle Function
MNOPLS = Midnight_Open_LS=="Solid" ? line.style_solid : Midnight_Open_LS == "Dotted" ? line.style_dotted : line.style_dashed
LNOPLS = london_Open_LS=="Solid" ? line.style_solid : london_Open_LS == "Dotted" ? line.style_dotted : line.style_dashed
NWYOPLS = NY_Open_LS=="Solid" ? line.style_solid : NY_Open_LS == "Dotted" ? line.style_dotted : line.style_dashed
EQOPLS = Equities_Open_LS=="Solid" ? line.style_solid : Equities_Open_LS == "Dotted" ? line.style_dotted : line.style_dashed
MOPLSS = MOPLS=="Solid" ? line.style_solid : MOPLS == "Dotted" ? line.style_dotted : line.style_dashed
NYOPLSS = NYOPLS=="Solid" ? line.style_solid : NYOPLS == "Dotted" ? line.style_dotted : line.style_dashed
EOPLSS = EOPLS=="Solid" ? line.style_solid : EOPLS == "Dotted" ? line.style_dotted : line.style_dashed
AFTOPLSS = AFTOPLS=="Solid" ? line.style_solid : AFTOPLS == "Dotted" ? line.style_dotted : line.style_dashed
WeekOpenLS = WOLS=="Solid" ? line.style_solid : WOLS == "Dotted" ? line.style_dotted : line.style_dashed
MonthOpenLS = MOLS=="Solid" ? line.style_solid : MOLS == "Dotted" ? line.style_dotted : line.style_dashed
// Linewidth Function
MOPLW = Midnight_Open_LW=="1px" ? 1 : Midnight_Open_LW == "2px" ? 2 : Midnight_Open_LW == "3px" ? 3 : Midnight_Open_LW == "4px" ? 4 : 5
LOPLW = London_Open_LW=="1px" ? 1 : London_Open_LW == "2px" ? 2 : London_Open_LW == "3px" ? 3 : London_Open_LW == "4px" ? 4 : 5
NYOPLW = NY_Open_LW=="1px" ? 1 : NY_Open_LW == "2px" ? 2 : NY_Open_LW == "3px" ? 3 : NY_Open_LW == "4px" ? 4 : 5
EOPLW = Equities_Open_LW=="1px" ? 1 : Equities_Open_LW == "2px" ? 2 : Equities_Open_LW == "3px" ? 3 : Equities_Open_LW == "4px" ? 4 : 5
MOPPLW = i_MOPLW=="1px" ? 1 : i_MOPLW == "2px" ? 2 : i_MOPLW == "3px" ? 3 : i_MOPLW == "4px" ? 4 : 5
NYOPPLW = i_NYOPLW=="1px" ? 1 : i_NYOPLW == "2px" ? 2 : i_NYOPLW == "3px" ? 3 : i_NYOPLW == "4px" ? 4 : 5
EOPPLW = i_EOPLW=="1px" ? 1 : i_EOPLW == "2px" ? 2 : i_EOPLW == "3px" ? 3 : i_EOPLW == "4px" ? 4 : 5
AFTOPLW = i_AFTOPLW=="1px" ? 1 : i_AFTOPLW == "2px" ? 2 : i_AFTOPLW == "3px" ? 3 : i_AFTOPLW == "4px" ? 4 : 5
WEEKOPPLW = i_WOPLW=="1px" ? 1 : i_WOPLW == "2px" ? 2 : i_WOPLW == "3px" ? 3 : i_WOPLW == "4px" ? 4 : 5
MONTHOPPLW = i_MONPLW=="1px" ? 1 : i_MONPLW == "2px" ? 2 : i_MONPLW == "3px" ? 3 : i_MONPLW == "4px" ? 4 : 5
// Label Size Function
LabelSize =LabelSizeInput=="Auto" ? size.auto : LabelSizeInput=="Tiny" ? size.tiny : LabelSizeInput=="Small" ? size.small : LabelSizeInput=="Normal" ? size.normal : LabelSizeInput=="Large" ? size.large : size.huge
// Creating Variables
var London_Start_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=LSVLC, width=1)
var London_End_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=LSVLC, width=1)
var LondonFill = linefill.new(London_Start_Vline, London_End_Vline, LSFC)
var NY_Start_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=NYSVLC, width=1)
var NY_End_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=NYSVLC, width=1)
var NYFill = linefill.new(NY_Start_Vline, NY_End_Vline, NYSFC)
var LC_Start_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=NYSVLC, width=1)
var LC_End_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=NYSVLC, width=1)
var LCFill = linefill.new(LC_Start_Vline, LC_End_Vline, LCSFC)
var PM_Start_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=PMSVLC, width=1)
var PM_End_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=PMSVLC, width=1)
var PMFill = linefill.new(PM_Start_Vline, PM_End_Vline, PMSFC)
var Asian_Start_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=ASVLC, width=1)
var Asian_End_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=ASVLC, width=1)
var AsianFill = linefill.new(Asian_Start_Vline, Asian_End_Vline, ASFC)
var Free_Start_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=ASVLC, width=1)
var Free_End_Vline = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=ASVLC, width=1)
var FreeFill = linefill.new(Free_Start_Vline, Free_End_Vline, FSFC)
var Midnight_Open = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=MOPColor, width=1)
var London_Open = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=LOPColor, width=1)
var NY_Open = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=NYOPColor, width=1)
var Equities_Open = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=EOPColor, width=1)
// When a New Day Starts, Start Drawing all lines
if newDay and dayofweek != dayofweek.sunday
// London Session
if (ShowLondon and DOM)
if ShowTSO
line.delete(London_Start_Vline )
line.delete(London_End_Vline )
linefill.delete(LondonFill )
London_Start_Vline := vline(LondonStartTime,transparentcol, line.style_solid, 1)
London_End_Vline := vline(LondonEndTime, transparentcol, line.style_solid, 1)
if ShowSFill
LondonFill := linefill.new(London_Start_Vline, London_End_Vline, LSFC)
// New York Session
if (ShowNY and DOM)
if ShowTSO
line.delete(NY_Start_Vline )
line.delete(NY_End_Vline )
linefill.delete(NYFill )
NY_Start_Vline := vline(NYStartTime, transparentcol, line.style_solid, 1)
NY_End_Vline := vline(NYEndTime, transparentcol, line.style_solid, 1)
if ShowSFill
NYFill := linefill.new(NY_Start_Vline, NY_End_Vline, NYSFC)
// London Close
if (ShowLC and DOM)
if ShowTSO
line.delete(LC_End_Vline )
linefill.delete(LCFill )
LC_Start_Vline := vline(LCStartTime, transparentcol, line.style_solid, 1)
LC_End_Vline := vline(LCEndTime, transparentcol, line.style_solid, 1)
if ShowSFill
LCFill := linefill.new(LC_Start_Vline, LC_End_Vline, LCSFC)
// PM Session
if (ShowPM and DOM)
if ShowTSO
line.delete(PM_Start_Vline )
line.delete(PM_End_Vline )
linefill.delete(PMFill )
PM_Start_Vline := vline(PMStartTime, transparentcol, line.style_solid, 1)
PM_End_Vline := vline(PMEndTime, transparentcol, line.style_solid, 1)
if ShowSFill
PMFill := linefill.new(PM_Start_Vline, PM_End_Vline, PMSFC)
// Asian Session
if (ShowAsian and DOM)
if ShowTSO
line.delete(Asian_Start_Vline )
line.delete(Asian_End_Vline )
linefill.delete(AsianFill )
Asian_Start_Vline := vline(AsianStartTime, transparentcol, line.style_solid, 1)
Asian_End_Vline := vline(AsianEndTime, transparentcol, line.style_solid, 1)
// if dayofweek == dayofweek.friday
// // line.delete(Asian_Start_Vline)
// // line.delete(Asian_End_Vline)
// Asian_Start_Vline := vline(MidnightOpenTime+244800000, transparentcol, line.style_solid, 1)
// Asian_End_Vline := vline(MidnightOpenTime+259200000, transparentcol, line.style_solid, 1)
if ShowSFill
AsianFill := linefill.new(Asian_Start_Vline, Asian_End_Vline, ASFC)
// Free Session
if (ShowFreeSesh and DOM)
if ShowTSO
line.delete(Free_Start_Vline )
line.delete(Free_End_Vline )
linefill.delete(FreeFill )
Free_Start_Vline := vline(FreeStartTime, transparentcol, line.style_solid, 1)
Free_End_Vline := vline(FreeEndTime, transparentcol, line.style_solid, 1)
if ShowSFill
FreeFill := linefill.new(Free_Start_Vline, Free_End_Vline, FSFC)
// Midnight Opening Price
if (ShowMOP and DOM)
if MOLHist == false
line.delete(Midnight_Open )
Midnight_Open := vline(MidnightOpenTime, MOPColor, MNOPLS, MOPLW)
// London Opening Price
if (ShowLOP and DOM)
if ShowTSO
line.delete(London_Open )
London_Open := vline(LondonOpenTime, LOPColor, LNOPLS, LOPLW)
// New York Opening Price
if (ShowNYOP and DOM)
if ShowTSO
line.delete(NY_Open )
NY_Open := vline(NYOpenTime, NYOPColor, NWYOPLS, NYOPLW)
// Equities Opening Price
if (ShowEOP and DOM)
if ShowTSO
line.delete(Equities_Open )
Equities_Open := vline(EquitiesOpenTime, EOPColor, EQOPLS, EOPLW)
// Variables
var label MOPLB = na
var line MOPLN = na
var label NYOPLB = na
var line NYOPLN = na
var label EOPLB = na
var line EOPLN = na
var line AFTLN = na
var label AFTLB = na
// New York Midnight Open Price line
var openMidnight = 0.0
if tMidnight
if not tMidnight
openMidnight := open
else
openMidnight := math.max(open, openMidnight)
if (ShowMOPP and (openMidnight != openMidnight ) and DOM and barstate.isconfirmed)
label.delete(MOPLB )
if ShowMOPL == false
line.delete(MOPLN )
MOPLN := line.new(x1=tMidnight, y1=openMidnight, x2=tMidnight+86400000, xloc=xloc.bar_time, y2=openMidnight, color=MOPColP, style=MOPLSS, width=MOPPLW)
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
line.set_x2(MOPLN, tMidnight+259200000)
if ShowLabel
MOPLB := label.new(x=tMidnight+86400000, y=openMidnight, xloc=xloc.bar_time, color=LabelColor, textcolor=MOPColP, style=label.style_label_left, size=LabelSize, tooltip="Midnight Opening Price")
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
label.set_x(MOPLB, tMidnight+259200000)
if ShowLabelText
if SFistrue
if ShowPrices == true
label.set_text(MOPLB, " 00:00 | " + str.tostring(open))
else
label.set_text(MOPLB, " 00:00 ")
label.set_tooltip(MOPLB, "Midnight Opening Price")
else
if ShowPrices == true
label.set_text(MOPLB, " Midnight Opening Price | " + str.tostring(open))
else
label.set_text(MOPLB, " Midnight Opening Price ")
label.set_tooltip(MOPLB, "")
label.set_textcolor(MOPLB, LabelTextColor)
label.set_size(MOPLB,LabelSize)
if time > PMEndTime and time < (MidnightOpenTime + 86400000)
line.delete(MOPLN )
if Terminusinp != "Terminus @ Next Midnight" and ShowMOPL == false
line.set_x2(MOPLN, Terminus(Terminusinp))
label.set_x(MOPLB, Terminus(Terminusinp))
// New York Opening Price Line
if (ShowNYOPP and (time == NYOpenTime) and DOM)
label.delete(NYOPLB )
if ShowPrev == false
line.delete(NYOPLN )
NYOPLN := line.new(x1=NYOpenTime, y1=open, x2=NYOpenTime+55800000, xloc=xloc.bar_time, y2=open, color=NYOPColP, style=NYOPLSS, width=NYOPPLW)
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
line.set_x2(NYOPLN, NYOpenTime+228600000)
if ShowLabel
NYOPLB := label.new(x=NYOpenTime+55800000, y=open, xloc=xloc.bar_time, color=LabelColor, textcolor=NYOPColP, style=label.style_label_left, size=LabelSize, tooltip="New York Opening Price")
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
label.set_x(NYOPLB, NYOpenTime+228600000)
if ShowLabelText
if SFistrue
if ShowPrices == true
label.set_text(NYOPLB, " 08:30 | " + str.tostring(open))
else
label.set_text(NYOPLB, " 08:30 ")
label.set_tooltip(NYOPLB, "New York Opening Price")
else
if ShowPrices == true
label.set_text(NYOPLB, " New York Opening Price | " + str.tostring(open))
else
label.set_text(NYOPLB, " New York Opening Price ")
label.set_tooltip(NYOPLB, "")
label.set_textcolor(NYOPLB, LabelTextColor)
label.set_size(NYOPLB,LabelSize)
if Terminusinp != "Terminus @ Next Midnight" and ShowPrev == false
line.set_x2(NYOPLN, Terminus(Terminusinp))
label.set_x(NYOPLB, Terminus(Terminusinp))
// Equities Opening Price Line
if (ShowEOPP and (time == EquitiesOpenTime) and DOM)
label.delete(EOPLB )
if ShowPrev == false
line.delete(EOPLN )
EOPLN := line.new(x1=EquitiesOpenTime, y1=open, x2=EquitiesOpenTime+52200000, xloc=xloc.bar_time, y2=open, color=EOPColP, style=EOPLSS, width=EOPPLW)
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
line.set_x2(EOPLN, EquitiesOpenTime+225000000)
if ShowLabel
EOPLB := label.new(x=EquitiesOpenTime+52200000, y=open, xloc=xloc.bar_time, color=LabelColor, textcolor=EOPColP, style=label.style_label_left, size=LabelSize, tooltip="Equities Opening Price")
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
label.set_x(EOPLB, EquitiesOpenTime+225000000)
if ShowLabelText
if SFistrue
if ShowPrices == true
label.set_text(EOPLB, " 09:30 | " + str.tostring(open))
else
label.set_text(EOPLB, " 09:30 ")
label.set_tooltip(EOPLB, "Equities Opening Price")
else
if ShowPrices == true
label.set_text(EOPLB, " Equities Opening Price | " + str.tostring(open))
else
label.set_text(EOPLB, " Equities Opening Price ")
label.set_tooltip(EOPLB, "")
label.set_textcolor(EOPLB, LabelTextColor)
label.set_size(EOPLB,LabelSize)
if Terminusinp != "Terminus @ Next Midnight" and ShowPrev == false
line.set_x2(EOPLN, Terminus(Terminusinp))
label.set_x(EOPLB, Terminus(Terminusinp))
// Afternoon Opening Price Line
if (ShowAFTPP and (time == AfternoonOpenTime) and DOM)
label.delete(AFTLB )
if ShowPrev == false
line.delete(AFTLN )
AFTLN := line.new(x1=AfternoonOpenTime, y1=open, x2=EquitiesOpenTime+52200000, xloc=xloc.bar_time, y2=open, color=AFTOPColP, style=AFTOPLSS, width=AFTOPLW)
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
line.set_x2(AFTLN, EquitiesOpenTime+225000000)
if ShowLabel
AFTLB := label.new(x=EquitiesOpenTime+52200000, y=open, xloc=xloc.bar_time, color=LabelColor, textcolor=AFTOPColP, style=label.style_label_left, size=LabelSize, tooltip="Equities Opening Price")
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
label.set_x(AFTLB, EquitiesOpenTime+225000000)
if ShowLabelText
if SFistrue
if ShowPrices == true
label.set_text(AFTLB, " 01:30 | " + str.tostring(open))
else
label.set_text(AFTLB, " 01:30 ")
label.set_tooltip(AFTLB, " Afternoon Opening Price")
else
if ShowPrices == true
label.set_text(AFTLB, " Afternoon Opening Price | " + str.tostring(open))
else
label.set_text(AFTLB, " Afternoon Opening Price ")
label.set_tooltip(AFTLB, "")
label.set_textcolor(AFTLB, LabelTextColor)
label.set_size(AFTLB,LabelSize)
if Terminusinp != "Terminus @ Next Midnight" and ShowPrev == false
line.set_x2(AFTLN, Terminus(Terminusinp))
label.set_x(AFTLB, Terminus(Terminusinp))
// HTF Variables
var Weekly_open = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=i_WeekOpenCol, style=WeekOpenLS, width=1)
var Weekly_openlbl = label.new(x=na, y=na, xloc=xloc.bar_time, color=LabelColor, textcolor=LabelTextColor, style=label.style_label_left, size=LabelSize)
var WeeklyOpenTime = time
var Monthly_open = line.new(x1=na, y1=na, x2=na, xloc=xloc.bar_time, y2=close, color=i_MonthOpenCol, style=MonthOpenLS, width=1)
var Monthly_openlbl = label.new(x=na, y=na, xloc=xloc.bar_time, color=LabelColor, textcolor=LabelTextColor, style=label.style_label_left, size=LabelSize)
var MonthlyOpenTime = time
// Get HTF Price levels
WeeklyOpen = request.security(syminfo.tickerid, "W", open, lookahead = barmerge.lookahead_on)
MonthlyOpen = request.security(syminfo.tickerid, "M", open, lookahead = barmerge.lookahead_on)
// Weekly Open
if newWeek
WeeklyOpenTime := time
if ShowWeekOpen and newDay and Last4Weeks
label.delete(Weekly_openlbl )
line.delete(Weekly_open )
// if ShowPrev == false
// line.delete(Weekly_open )
Weekly_open:= line.new(x1=WeeklyOpenTime-25200000, y1=WeeklyOpen, x2=EquitiesOpenTime+52200000, xloc=xloc.bar_time, y2=WeeklyOpen, color=i_WeekOpenCol, style=WeekOpenLS, width=WEEKOPPLW)
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
line.set_x2(Weekly_open, EquitiesOpenTime+225000000)
if ShowLabel
Weekly_openlbl := label.new(x=EquitiesOpenTime+52200000, y=WeeklyOpen, xloc=xloc.bar_time, color=LabelColor, textcolor=LabelTextColor, style=label.style_label_left, size=LabelSize, tooltip="Weekly Open: " + str.tostring(WeeklyOpen))
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
label.set_x(Weekly_openlbl, EquitiesOpenTime+225000000)
if ShowLabelText
if SFistrue
if ShowPrices == true
label.set_text(Weekly_openlbl," W.O. | " + str.tostring(WeeklyOpen))
else
label.set_text(Weekly_openlbl," W.O. ")
label.set_tooltip(Weekly_openlbl, " Weekly Opening Price ")
else
if ShowPrices == true
label.set_text(Weekly_openlbl," Weekly Open | " + str.tostring(WeeklyOpen))
else
label.set_text(Weekly_openlbl," Weekly Open ")
label.set_tooltip(Weekly_openlbl, "")
label.set_textcolor(Weekly_openlbl, LabelTextColor)
label.set_size(Weekly_openlbl, LabelSize)
if timeframe.multiplier > 60
line.set_x2(Weekly_open, AsianEndTime + 232000000)
label.set_x(Weekly_openlbl, AsianEndTime + 232000000)
if timeframe.period == "D"
line.set_x2(Weekly_open, AsianEndTime + 832000000)
label.set_x(Weekly_openlbl, AsianEndTime + 832000000)
if timeframe.period == "M"
line.delete(Weekly_open)
label.delete(Weekly_openlbl)
if Terminusinp != "Terminus @ Next Midnight" and DOM
line.set_x2(Weekly_open, Terminus(Terminusinp))
label.set_x(Weekly_openlbl, Terminus(Terminusinp))
// Monthly Open
if newMonth
MonthlyOpenTime := time
if showMonthOpen and newDay
line.delete(Monthly_open )
label.delete(Monthly_openlbl )
Monthly_open:= line.new(x1=MonthlyOpenTime, y1=MonthlyOpen, x2=AsianEndTime, xloc=xloc.bar_time, y2=MonthlyOpen, color=i_MonthOpenCol, style=MonthOpenLS, width=MONTHOPPLW)
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
line.set_x2(Monthly_open, EquitiesOpenTime+225000000)
if ShowLabel
Monthly_openlbl := label.new(x=AsianEndTime, y=MonthlyOpen, xloc=xloc.bar_time, color=LabelColor, textcolor=LabelTextColor, style=label.style_label_left, size=LabelSize, tooltip="Monthly Open: " + str.tostring(MonthlyOpen))
if dayofweek == dayofweek.friday and syminfo.type != "crypto"
label.set_x(Monthly_openlbl, EquitiesOpenTime+225000000)
if ShowLabelText
if SFistrue
if ShowPrices == true
label.set_text(Monthly_openlbl," M.O. | " + str.tostring(MonthlyOpen))
else
label.set_text(Monthly_openlbl," M.O. ")
label.set_tooltip(Monthly_openlbl, " Monthly Opening Price ")
else
if ShowPrices == true
label.set_text(Monthly_openlbl, " Monthly Open | " + str.tostring(MonthlyOpen))
else
label.set_text(Monthly_openlbl, " Monthly Open ")
label.set_tooltip(Monthly_openlbl, "")
label.set_textcolor(Monthly_openlbl, LabelTextColor)
label.set_size(Monthly_openlbl, LabelSize)
if timeframe.multiplier > 60
line.set_x2(Monthly_open, AsianEndTime + 232000000)
label.set_x(Monthly_openlbl, AsianEndTime + 232000000)
if timeframe.period == "D"
line.set_x2(Monthly_open, AsianEndTime + 832000000)
label.set_x(Monthly_openlbl, AsianEndTime + 832000000)
if timeframe.period == "W"
line.set_x2(Monthly_open, AsianEndTime + 2592000000)
label.set_x(Monthly_openlbl, AsianEndTime + 2592000000)
if timeframe.period == "M"
line.delete(Monthly_open)
label.delete(Monthly_openlbl)
if Terminusinp != "Terminus @ Next Midnight" and DOM
line.set_x2(Monthly_open, Terminus(Terminusinp))
label.set_x(Monthly_openlbl, Terminus(Terminusinp))
// CBDR Stuff
var float cbdr_hi = na
var float cbdr_lo = na
var float cbdr_diff = na
var box cbdrbox = na
var line cbdr_hi_line = na
var line cbdr_lo_line = na
var line dev01negline = na
var line dev02negline = na
var line dev03negline = na
var line dev04negline = na
var line dev01posline = na
var line dev02posline = na
var line dev03posline = na
var line dev04posline = na
if SessionBegins(CBDR) and DOM
cbdr_hi := high
cbdr_lo := low
cbdr_diff := cbdr_hi - cbdr_lo
if ShowTSO
box.delete(cbdrbox )
line.delete(dev01posline )
line.delete(dev01negline )
line.delete(dev02posline )
line.delete(dev02negline )
line.delete(dev03posline )
line.delete(dev03negline )
line.delete(dev04posline )
line.delete(dev04negline )
if ShowCBDR
cbdrbox := box.new(cbdrOpenTime, cbdr_hi, cbdrEndTime, cbdr_lo, color.new(CBDRBoxCol,90), 1, line.style_solid, extend.none, xloc.bar_time, color.new(CBDRBoxCol,90), txt0, size.auto, color.new(box_text_cbdr_col,80), text_wrap=text.wrap_auto)
if dayofweek == dayofweek.friday
box.set_right(cbdrbox, cbdrOpenTime+187200000)
line.set_x2(cbdr_hi_line, cbdrOpenTime+187200000)
line.set_x2(cbdr_lo_line, cbdrOpenTime+187200000)
if box_text_cbdr == false
box.set_text(cbdrbox, "")
if ShowDev and ShowCBDR and bool_cbdr_dev
for i = 1 to DevCount by 1
if i == 1
dev01posline := line.new(cbdrOpenTime, cbdr_hi + cbdr_diff * i, cbdrEndTime, cbdr_hi + cbdr_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev01negline := line.new(cbdrOpenTime, cbdr_hi - cbdr_diff * i, cbdrEndTime, cbdr_lo - cbdr_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if dayofweek == dayofweek.friday
line.set_x2(dev01posline, cbdrOpenTime+187200000)
line.set_x2(dev01negline, cbdrOpenTime+187200000)
if i == 2
dev02posline := line.new(cbdrOpenTime, cbdr_hi + cbdr_diff * i, cbdrEndTime, cbdr_lo + cbdr_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev02negline := line.new(cbdrOpenTime, cbdr_hi - cbdr_diff * i, cbdrEndTime, cbdr_lo - cbdr_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if dayofweek == dayofweek.friday
line.set_x2(dev02posline, cbdrOpenTime+187200000)
line.set_x2(dev02negline, cbdrOpenTime+187200000)
if i == 3
dev03posline := line.new(cbdrOpenTime, cbdr_hi + cbdr_diff * i, cbdrEndTime, cbdr_lo + cbdr_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev03negline := line.new(cbdrOpenTime, cbdr_hi - cbdr_diff * i, cbdrEndTime, cbdr_lo - cbdr_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if dayofweek == dayofweek.friday
line.set_x2(dev03posline, cbdrOpenTime+187200000)
line.set_x2(dev03negline, cbdrOpenTime+187200000)
if i == 4
dev04posline := line.new(cbdrOpenTime, cbdr_hi + cbdr_diff * i, cbdrEndTime, cbdr_lo + cbdr_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev04negline := line.new(cbdrOpenTime, cbdr_hi - cbdr_diff * i, cbdrEndTime, cbdr_lo - cbdr_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if dayofweek == dayofweek.friday
line.set_x2(dev04posline, cbdrOpenTime+187200000)
line.set_x2(dev04negline, cbdrOpenTime+187200000)
else if CBDRTime
cbdr_hi := math.max(high, cbdr_hi)
cbdr_lo := math.min(low, cbdr_lo)
cbdr_diff := cbdr_hi - cbdr_lo
for i = 1 to DevCount by 1
if i == 1 and ShowDev
line.set_y1(dev01posline, cbdr_hi + cbdr_diff * i)
line.set_y2(dev01posline, cbdr_hi + cbdr_diff * i)
line.set_y1(dev01negline, cbdr_lo - cbdr_diff * i)
line.set_y2(dev01negline, cbdr_lo - cbdr_diff * i)
if i == 2 and ShowDev
line.set_y1(dev02posline, cbdr_hi + cbdr_diff * i)
line.set_y2(dev02posline, cbdr_hi + cbdr_diff * i)
line.set_y1(dev02negline, cbdr_lo - cbdr_diff * i)
line.set_y2(dev02negline, cbdr_lo - cbdr_diff * i)
if i == 3 and ShowDev
line.set_y1(dev03posline, cbdr_hi + cbdr_diff * i)
line.set_y2(dev03posline, cbdr_hi + cbdr_diff * i)
line.set_y1(dev03negline, cbdr_lo - cbdr_diff * i)
line.set_y2(dev03negline, cbdr_lo - cbdr_diff * i)
if i == 4 and ShowDev
line.set_y1(dev04posline, cbdr_hi + cbdr_diff * i)
line.set_y2(dev04posline, cbdr_hi + cbdr_diff * i)
line.set_y1(dev04negline, cbdr_lo - cbdr_diff * i)
line.set_y2(dev04negline, cbdr_lo - cbdr_diff * i)
if (cbdr_hi > cbdr_hi )
if ShowCBDR
box.set_top(cbdrbox, cbdr_hi)
if (cbdr_lo < cbdr_lo )
if ShowCBDR
box.set_bottom(cbdrbox, cbdr_lo)
if DevDirection == "Upside Only"
line.delete(dev01negline)
line.delete(dev02negline)
line.delete(dev03negline)
line.delete(dev04negline)
else if DevDirection == "Downside Only"
line.delete(dev01posline)
line.delete(dev02posline)
line.delete(dev03posline)
line.delete(dev04posline)
// ASIA Stuff
var float asia_hi = na
var float asia_lo = na
var float asia_diff = na
var box asia_box = na
var line asia_hi_line = na
var line asia_lo_line = na
var line dev01negline_asia = na
var line dev02negline_asia = na
var line dev03negline_asia = na
var line dev04negline_asia = na
var line dev01posline_asia = na
var line dev02posline_asia = na
var line dev03posline_asia = na
var line dev04posline_asia = na
if SessionBegins(ASIA) and DOM
asia_hi := high
asia_lo := low
asia_diff := asia_hi - asia_lo
if ShowTSO
box.delete(asia_box )
line.delete(dev01posline_asia )
line.delete(dev01negline_asia )
line.delete(dev02posline_asia )
line.delete(dev02negline_asia )
line.delete(dev03posline_asia )
line.delete(dev03negline_asia )
line.delete(dev04posline_asia )
line.delete(dev04negline_asia )
if ShowASIA
asia_box := box.new(asiaOpenTime, asia_hi, asiaEndTime, asia_lo, color.new(ASIABoxCol,90), 1, line.style_solid, extend.none, xloc.bar_time, color.new(ASIABoxCol,90), txt1, size.auto, color.new(box_text_asia_col,80), text_wrap=text.wrap_auto)
if box_text_asia == false
box.set_text(asia_box, "")
if ShowDev and ShowASIA and bool_asia_dev
for i = 1 to DevCount by 1
if i == 1
dev01posline_asia := line.new(asiaOpenTime, asia_hi + asia_diff * i, asiaEndTime, asia_hi + asia_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev01negline_asia := line.new(asiaOpenTime, asia_hi - asia_diff * i, asiaEndTime, asia_lo - asia_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if i == 2
dev02posline_asia := line.new(asiaOpenTime, asia_hi + asia_diff * i, asiaEndTime, asia_lo + asia_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev02negline_asia := line.new(asiaOpenTime, asia_hi - asia_diff * i, asiaEndTime, asia_lo - asia_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if i == 3
dev03posline_asia := line.new(asiaOpenTime, asia_hi + asia_diff * i, asiaEndTime, asia_lo + asia_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev03negline_asia := line.new(asiaOpenTime, asia_hi - asia_diff * i, asiaEndTime, asia_lo - asia_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if i == 4
dev04posline_asia := line.new(asiaOpenTime, asia_hi + asia_diff * i, asiaEndTime, asia_lo + asia_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev04negline_asia := line.new(asiaOpenTime, asia_hi - asia_diff * i, asiaEndTime, asia_lo - asia_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
else if ASIATime
asia_hi := math.max(high, asia_hi)
asia_lo := math.min(low, asia_lo)
asia_diff := asia_hi - asia_lo
for i = 1 to DevCount by 1
if i == 1 and ShowDev
line.set_y1(dev01posline_asia, asia_hi + asia_diff * i)
line.set_y2(dev01posline_asia, asia_hi + asia_diff * i)
line.set_y1(dev01negline_asia, asia_lo - asia_diff * i)
line.set_y2(dev01negline_asia, asia_lo - asia_diff * i)
if i == 2 and ShowDev
line.set_y1(dev02posline_asia, asia_hi + asia_diff * i)
line.set_y2(dev02posline_asia, asia_hi + asia_diff * i)
line.set_y1(dev02negline_asia, asia_lo - asia_diff * i)
line.set_y2(dev02negline_asia, asia_lo - asia_diff * i)
if i == 3 and ShowDev
line.set_y1(dev03posline_asia, asia_hi + asia_diff * i)
line.set_y2(dev03posline_asia, asia_hi + asia_diff * i)
line.set_y1(dev03negline_asia, asia_lo - asia_diff * i)
line.set_y2(dev03negline_asia, asia_lo - asia_diff * i)
if i == 4 and ShowDev
line.set_y1(dev04posline_asia, asia_hi + asia_diff * i)
line.set_y2(dev04posline_asia, asia_hi + asia_diff * i)
line.set_y1(dev04negline_asia, asia_lo - asia_diff * i)
line.set_y2(dev04negline_asia, asia_lo - asia_diff * i)
if (asia_hi > asia_hi )
box.set_top(asia_box, asia_hi)
if (asia_lo < asia_lo )
box.set_bottom(asia_box, asia_lo)
if DevDirection == "Upside Only"
line.delete(dev01negline_asia)
line.delete(dev02negline_asia)
line.delete(dev03negline_asia)
line.delete(dev04negline_asia)
else if DevDirection == "Downside Only"
line.delete(dev01posline_asia)
line.delete(dev02posline_asia)
line.delete(dev03posline_asia)
line.delete(dev04posline_asia)
// FLOUT Stuff
var float flout_hi = na
var float flout_lo = na
var float flout_diff = na
var box floutbox = na
var line flout_hi_line = na
var line flout_lo_line = na
var line dev01negline_flout = na
var line dev02negline_flout = na
var line dev03negline_flout = na
var line dev04negline_flout = na
var line dev01posline_flout = na
var line dev02posline_flout = na
var line dev03posline_flout = na
var line dev04posline_flout = na
if SessionBegins(FLOUT) and DOM
flout_hi := high
flout_lo := low
flout_diff := flout_hi - flout_lo
if ShowTSO
box.delete(floutbox )
line.delete(dev01posline_flout )
line.delete(dev01negline_flout )
line.delete(dev02posline_flout )
line.delete(dev02negline_flout )
line.delete(dev03posline_flout )
line.delete(dev03negline_flout )
line.delete(dev04posline_flout )
line.delete(dev04negline_flout )
if ShowFLOUT
floutbox := box.new(floutOpenTime, flout_hi, floutEndTime, flout_lo, color.new(FLOUTBoxCol,90), 1, line.style_solid, extend.none, xloc.bar_time, color.new(FLOUTBoxCol,90), txt7, size.auto, color.new(box_text_flout_col,80), text_wrap=text.wrap_auto)
if dayofweek == dayofweek.friday
box.set_right(floutbox, floutOpenTime+201600000)
line.set_x2(flout_hi_line, floutOpenTime+201600000)
line.set_x2(flout_lo_line, floutOpenTime+201600000)
if box_text_cbdr == false
box.set_text(floutbox, "")
if ShowDev and ShowFLOUT and bool_flout_dev
for i = 0.5 to DevCount by 0.5
if i == 0.5
dev01posline_flout := line.new(floutOpenTime, flout_hi + flout_diff * i, floutEndTime, flout_hi + flout_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev01negline_flout := line.new(floutOpenTime, flout_hi - flout_diff * i, floutEndTime, flout_lo - flout_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if dayofweek == dayofweek.friday
line.set_x2(dev01posline_flout, floutOpenTime+201600000)
line.set_x2(dev01negline_flout, floutOpenTime+201600000)
if i == 1
dev02posline_flout := line.new(floutOpenTime, flout_hi + flout_diff * i, floutEndTime, flout_lo + flout_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev02negline_flout := line.new(floutOpenTime, flout_hi - flout_diff * i, floutEndTime, flout_lo - flout_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if dayofweek == dayofweek.friday
line.set_x2(dev02posline_flout, floutOpenTime+201600000)
line.set_x2(dev02negline_flout, floutOpenTime+201600000)
if i == 1.5
dev03posline_flout := line.new(floutOpenTime, flout_hi + flout_diff * i, floutEndTime, flout_lo + flout_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev03negline_flout := line.new(floutOpenTime, flout_hi - flout_diff * i, floutEndTime, flout_lo - flout_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if dayofweek == dayofweek.friday
line.set_x2(dev03posline_flout, floutOpenTime+201600000)
line.set_x2(dev03negline_flout, floutOpenTime+201600000)
if i == 2
dev04posline_flout := line.new(floutOpenTime, flout_hi + flout_diff * i, floutEndTime, flout_lo + flout_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
dev04negline_flout := line.new(floutOpenTime, flout_hi - flout_diff * i, floutEndTime, flout_lo - flout_diff * i, xloc=xloc.bar_time, color=DevLNCol, style=DEVLSS, width=DEVLW)
if dayofweek == dayofweek.friday
line.set_x2(dev04posline_flout, floutOpenTime+201600000)
line.set_x2(dev04negline_flout, floutOpenTime+201600000)
else if FLOUTTime
flout_hi := math.max(high, flout_hi)
flout_lo := math.min(low, flout_lo)
flout_diff := flout_hi - flout_lo
for i = 0.5 to DevCount by 0.5
if i == 0.5 and ShowDev
line.set_y1(dev01posline_flout, flout_hi + flout_diff * i)
line.set_y2(dev01posline_flout, flout_hi + flout_diff * i)
line.set_y1(dev01negline_flout, flout_lo - flout_diff * i)
line.set_y2(dev01negline_flout, flout_lo - flout_diff * i)
if i == 1 and ShowDev
line.set_y1(dev02posline_flout, flout_hi + flout_diff * i)
line.set_y2(
Beta Zones [MMT]Beta Zones
Overview
The Beta Zones indicator is a multi-timeframe analysis tool designed to identify and visualize price ranges (zones) across different timeframes on a TradingView chart. It draws boxes to represent high and low price levels for each enabled timeframe, helping traders spot key support and resistance zones, track price movements, and assess market signals relative to these zones. The indicator is highly customizable, allowing users to toggle timeframes, adjust colors, and control historical visibility.
Features
Multi-Timeframe Support : Tracks up to five user-defined timeframes (default: 15m, 1H, 4H, 1D, 1W) to display price zones.
Dynamic Price Boxes : Draws boxes on the chart to represent the high and low prices for each timeframe, updating dynamically as new bars form.
Signal Indicators : Provides directional signals (▲, ▼, →) based on the previous close relative to the current box's top and bottom.
Customizable Display : Includes options to show or hide historical boxes, adjust box colors, and configure a summary table.
Summary Table : Displays a table with timeframe status, price range, and signal information for quick reference.
Settings
Timeframes
Enable/Disable : Toggle each timeframe (e.g., 15m, 1H, 4H, 1D, 1W) to display or hide its respective zones.
Timeframe Selection : Choose custom timeframes for each of the five slots.
Color Customization : Set unique fill and border colors for each timeframe's boxes (default colors: green, blue, orange, purple, red).
Display
Max Historical Boxes : Limit the number of historical boxes per timeframe (default: 1, max: 50).
Show History : Toggle visibility of historical boxes (default: false, showing only the latest box).
Min Box Height : Ensures boxes have a minimum height in ticks (default: 1.0, currently hardcoded).
Table
Show Table : Enable or disable the summary table (default: true).
Background Color : Customize the table's background color.
Header Color : Set the color for the table's header row.
Text Color : Adjust the text color for table content.
Table Columns
Timeframe : Displays the selected timeframe (e.g., 15m, 1H).
Color : Shows the color associated with the timeframe's boxes.
Status : Indicates if the timeframe is "Active" (valid and lower than the chart's timeframe), "Invalid" (enabled but not lower), or "Disabled".
Range : Shows the price range (high - low) of the current box.
Signal : Displays ▲ (price above box), ▼ (price below box), or → (price within box) based on the previous close.
How to Use
Add to Chart : Apply the indicator to your TradingView chart.
Configure Timeframes : Enable desired timeframes and adjust their settings (e.g., 15m, 1H) to match your trading strategy.
Analyze Zones : Use the boxes to identify key price levels for support, resistance, or breakout opportunities.
Monitor Signals : Check the table's "Signal" column to gauge price direction relative to each timeframe's zone.
Customize Appearance : Adjust colors and historical box visibility to suit your preferences.
Ideal For
Swing Traders : Identify key price zones across multiple timeframes for entry/exit points.
Day Traders : Monitor short-term price movements relative to higher timeframe zones.
Technical Analysts : Combine with other indicators to confirm support/resistance levels.
Demand and Supply by Stock Fusion 1.1Title: Demand and Supply by Stock Fusion 1.1
Description: The "Demand and Supply by Stock Fusion 1.1" indicator is designed to identify and visualize institutional demand and supply zones on a chart, helping traders spot potential areas of price reversal or continuation. It highlights key price levels based on specific candlestick patterns and Momentum volume characteristics, making it suitable for various trading styles such as intraday, swing, or positional trading. The indicator supports customizable settings for timeframes, zone styles, and visual elements, ensuring flexibility for both novice and experienced traders.
Key features include:
• Dynamic Zone Detection: Identifies demand (DZ- RBR, DBR) and supply (SZ- DBD, RBD) zones on user-selected lower timeframes (LTF) or the chart’s native timeframe.
• Candle Coloring: Highlights explosive bullish/bearish candles and accumulation/base candles to emphasize significant price movements or consolidation phases.
• Zone Visualization: Plots zones as colored boxes with optional right extensions and customizable labels for clarity.
• Zone Management: Automatically removes zones after price retests or mitigation, ensuring the chart remains uncluttered.
• Informative Table: Displays real-time data on the closest zone, including the symbol, last traded price (LTP), zone type, proximal/distal prices, and proximity percentage.
• Customizable Settings: Offers options for trading modes (Manual, Normal, Conservative, Study), timeframe selection, zone strength, colors, transparency, and more.
This indicator is ideal for traders seeking to analyze market structure through institutional price action and Explosive Momentum volume based zones, with a focus on clarity and usability.
Functional Overview
1. Input Configuration:
o Trading Mode: Users can select from "Manual," "Normal," "Conservative," or "Study" modes to adjust zone sensitivity and behavior.
o Timeframe Selection: Allows users to choose a lower timeframe (e.g., 1-minute to yearly) for zone detection or use the chart’s native timeframe.
o Zone Strength: Adjustable multiplier for lower timeframe zones to control sensitivity.
o Visual Customization: Options to toggle candle coloring, zone labels, borders, and right extensions, with customizable colors, transparency, and label sizes.
o Table Settings: Configurable table for displaying zone data, with options for position, background color, text color, and font size.
o Zone Removal: Features to automatically remove zones after price retests or full mitigation to keep the chart clean.
2. Zone Detection:
o Identifies demand zones (Rally-Base-Rally , Drop-Base-Rally ) and supply zones (Drop-Base-Drop , Rally-Base-Drop ) based on candlestick patterns, volume thresholds, and price action relative to a moving average.
o Uses a base candle range (1 to 3 candles by default) to detect consolidation periods before explosive price movements.
o Incorporates momentum volume analysis to ensure zones are formed during high-Low volume periods, enhancing reliability.
3. Candle Analysis:
o Explosive Candles: Detects bullish or bearish candles with large body-to-range ratios and high volatility (based on ATR) to highlight significant price movements.
o Boring/Accumulation Candles: Identifies candles with small body-to-range ratios to mark consolidation phases, often preceding breakouts.
o Colors candles based on user preferences to visually distinguish explosive and accumulation phases.
4. Zone Visualization:
o Plots demand and supply zones as colored boxes, with options for "Wick to Wick" or "Body to Wick" zone styles.
o Supports right-extended zones for better visibility of active levels.
o Adds labels to zones (e.g., "D-DZ" / "D-SZ" for daily demand zone) with customizable sizes and colors.
5. Zone Management:
o Automatically removes zones when price closes within or beyond them, depending on user settings for retest or second-leg mitigation.
o Tracks removed zones to prevent redundant plotting and maintain chart clarity.
6. Table Display:
o Displays a table summarizing the closest active zone, including the symbol, current price, zone type (DZ/SZ), proximal/distal prices, and proximity percentage.
o Updates dynamically based on price action and zone changes.
7. Performance Optimization:
o Uses arrays to manage zones, labels, and table data efficiently.
o Limits the number of plotted elements (boxes, labels, lines) to comply with resource constraints (e.g., max 500 boxes/labels).
o Supports dynamic requests to handle data across different timeframes.
Disclaimer:-
The Demand and Supply by Stock Fusion 1.1 indicator is intended solely for informational and technical analysis purposes and does not provide financial advice or trading recommendations. Trading carries significant risks, including the potential for substantial financial losses. Users are fully responsible for their trading decisions and should perform their own research, assess their risk tolerance, and consult a licensed financial advisor before making any trades. The indicator’s signals are derived from market data, and historical performance does not guarantee future results. The developers and providers of this indicator are not liable for any losses or damages resulting from its use.
Position Size & Stop Loss | QuantEdgeBPosition Size & Stop Loss | QuantEdgeB
QuantEdgeB indicator for calculating risk-based position sizing, leverage, and dynamic stop-loss levels—all in one on-chart dashboard.
🔍 What It Does
1. Position Sizing
o Takes your Portfolio Value and Risk Percentage to compute how much dollar risk you’re willing to take.
o Given an Entry Price and Stop-Loss Price, it derives the per-trade risk and thus the optimal Position Size (number of contracts/shares).
o Based on your available Margin, it calculates the implied Leverage.
2. Stop-Loss Levels
o Offers two modes:
High-Low SL — plots the highest high and lowest low over user-defined lookback windows.
Market-Structure SL — dynamically tracks the current up/down “wick” extremes using an HMA-driven regime filter and places your stop just inside the recent high/low wicks.
o Always overlays both a “Highest Band” and “Lowest Band” as steplines, plus a simple moving average for trend context.
3. Dashboard Table
o Presents all core inputs and outputs in a neat on-chart table:
Portfolio Value, Margin, Risk %, Entry, Stop Loss
Computed Position Size and Leverage
Final Long SL and Short SL levels (depending on your chosen SL type)
o Fully customizable: choose table position, text size, color theme, and transparency.
⚙️ Inputs & Settings
Portfolio Value ($) -> Total account equity.
Margin on Exchange ($) -> Available margin for this trade.
Risk Percentage (%) -> Percent of portfolio to risk per trade.
Entry Price -> Your intended entry level.
Stop Loss Price -> Your intended stop level.
Decimal Places -> Rounding precision for “Position Size.”
Below the hood, “Position Size” is simply the number of units you should buy (or sell) so that, if your stop-loss is hit, you lose exactly your pre-defined risk amount. Here’s how to translate it into a real trade—and a quick example using the script’s default settings:
🔢 What “Position Size” Means - Deep Dive
• Units: the raw number of shares, contracts, or cryptocurrency coins.
• Risk per unit = |Entry Price – Stop-Loss Price|
• Total Risk = Portfolio Value × (Risk %)
• Position Size = Total Risk ÷ Risk per unit
If you trade instruments that are fractional (e.g. BTC) you’ll buy that many coins; if it’s a futures contract, you buy that many contracts; if it’s stock, that many shares.
🧮 Hypothetical Example
1. Inputs
o Portfolio Value = $100 000
o Risk % = 1%
o Entry Price = 105 000
o Stop-Loss Price = 104 000
o Margin Available = $10 000
2. Compute Your Risk Budget
3. Total Risk = 100 000 × (1 / 100) = $1 000
4. Compute Risk Per Unit
5. Risk per Unit = |105 000 – 104 000| = $1 000 per unit
6. Compute Position Size
7. Position Size = 1 000 ÷ 1 000 = 1 unit
o If you’re trading 1 BTC contract, you buy 1 contract.
o If it were stock, you’d buy 1 share.
o If it were spot BTC, you’d buy 1 BTC.
8. Compute Implied Leverage
9. Notional Exposure = Position Size × Entry Price = 1 × 105 000 = $105 000
10. Leverage = 105 000 ÷ 10 000 ≈ 10.5×
11. Place the Trade
o Buy 1 unit at 105 000.
o Place your stop-loss at 104 000.
o If price drifts down to 104 000, you lose exactly $1 000 (1% of your $100 000 account).
📋 Putting It All Together on the Chart
When the indicator’s table shows:
1. Portfolio Value = 100'000
2. Margin = 10'000
3. Risk% = 1%
4. Entry = 105'000
5. Stop Loss = 104'000
6. Size = 1
7. Leverage = 10.5x
…that tells you in plain terms:
“With $100 000 behind me and a 1% risk threshold, buying 1 unit here—with my stop at 104 000—means I stand to lose $1 000 if I’m wrong. I’m using $10 000 of margin, so I’m at roughly 10.5× leverage.”
No more guesswork around lot sizes or margin calls—this table gives you the exact numbers you need to place that order.
🎨 Visual Output
1. Stepline Plots
o Highest Band (short-side stop) in your down-color.
o Lowest Band (long-side stop) in your up-color.
o EMA Trend Line for context.
2. Dashboard Table
o Header with the indicator name.
o First section: all your Position Size inputs & results.
o Separator line + SL-Type label.
o Final section: Long SL and Short SL values under the chosen mode.
o Color and transparency reflect your selected theme.
🧑💼 Why It’s Useful
• Risk-First Sizing: Never guess your position again—risk is dollar-accurately defined.
• Flexible Stop-Loss: Choose the simple bar-high/low bands or an adaptive “wick-insider” based on market structure.
• On-Chart Clarity: Everything you need to size, stop-loss, and monitor your trade sits in one unified panel.
• Customizable: Color themes, font sizes, SL methods, and more—tailor it to your workflow.
Use this indicator to keep your risk parameters crystal-clear, automate your position sizing, and visualize both static and dynamic stop-loss levels—all without leaving your TradingView chart.
TotM - Volume compareTotM - Volume Compare Indicator
Overview:
This advanced volume comparison indicator allows traders to monitor and compare trading volumes across up to 15 different symbols simultaneously. Works with any tradable asset - stocks, forex, commodities, cryptocurrencies, indices, or futures. Perfect for identifying market trends, volume shifts, and trading opportunities across multiple instruments.
Key Features:
Multi-Symbol Tracking: Monitor up to 15 different symbols from any market simultaneously
Universal Compatibility: Works with any asset class - stocks, crypto, forex, commodities, ETFs, indices
Normalized Volume Display: Automatically normalizes volumes for accurate cross-asset comparison
Real-time Ranking Table: Dynamic table showing top performers by volume (customizable 5-15 rows)
Customizable Visualization: Individual color coding for each symbol for easy identification
Price-Weighted Volume Option: Toggle between raw volume and price-weighted volume (Volume × Price)
Smart Error Handling: Automatically skips invalid or unavailable symbols without disrupting the indicator
Moving Average Smoothing: Built-in EMA/SMA smoothing with adjustable period (default: 3)
Cross-Exchange Support: Mix symbols from different exchanges (Binance, NYSE, NASDAQ, etc.)
How It Works:
The indicator fetches volume data from selected symbols and normalizes them using a reference value for meaningful comparison. This normalization allows traders to compare assets with vastly different trading volumes and price levels on the same scale. The ranking table automatically sorts and displays the most active symbols, helping traders quickly identify where the market action is concentrated.
Use Cases:
Compare sector rotation (tech stocks vs financials vs energy)
Monitor volume across different asset classes simultaneously
Track correlated instruments (gold vs gold miners, oil vs energy stocks)
Identify unusual volume spikes across your watchlist
Compare index components' relative activity
Monitor forex pairs volume relationships
Track commodity futures volume patterns
Settings:
Enable/disable individual symbols
Customize colors for each tracked symbol
Adjust MA period for smoothing
Toggle price-weighted volume calculation
Show/hide ranking table
Adjust number of rows in ranking table (5-15)
© Trade on the Market (TotM) - Professional trading tools for informed decision making.
Lot Size + Margin InfoThis indicator is designed to give Futures & Options traders instant access to lot size and estimated margin requirements for the instrument they are viewing — directly on their TradingView chart. It combines real-time symbol detection with a built-in, regularly updated margin lookup table (sourced from Kotak Securities’ published margin requirements), while also handling fallback logic for unknown or unsupported symbols.
---
### What It Does
* Automatically Detects the Instrument Type
Identifies whether the current chart’s symbol is a futures contract, option, or a cash/spot instrument.
* Shows Accurate Lot Size
For supported F\&O symbols, it fetches the correct lot size directly from exchange data.
For options, it retrieves the lot size from the option’s point value.
For cash/spot symbols with linked futures, it uses the futures lot size.
* Calculates Estimated Margin
* For futures: `Lot Size × Current Price × Margin%` (Margin% sourced from the internal lookup table).
* For options: `Lot Size × Current Price` (simple multiplication, as options margin ≈ premium cost).
* For unsupported or non-FnO symbols: Displays "No FnO".
* Fallback Margin Logic
If a symbol is missing from the margin lookup table, the script applies a user-defined default margin percentage and highlights the data in orange to indicate it’s using fallback values.
* Debug Mode for Transparency
A toggle to display the exact symbol string used for fetching lot size and margin, so traders can verify the data source.
---
### How It Works
1. Symbol Normalization
The script standardizes symbol names to match the margin table format (e.g., converting `"NIFTY1!"` to `"NIFTY"`).
2. Type-Based Handling
* Futures – Uses point value for lot size, applies specific margin % from the table.
* Options – Uses option point value for lot size, margin is simply premium × lot size.
* Cash Symbols with Linked Futures – Attempts to find and use the associated futures contract for lot/margin data.
* Unsupported Symbols – Displays `"No FnO"`.
3. Margin Table Integration
The margin % table is manually updated from a reliable broker’s margin sheet (Kotak Securities) — ensuring alignment with real trading conditions.
4. Customizable Display
* Position (Top Right / Bottom Left / Bottom Right)
* Table background color, text color, font size, border width
* Editable label text for lot size and margin display
* Toggleable lot size and margin sections
---
### How to Use
1. Add the Indicator to Your Chart – Works on any NSE Futures, Options, or Cash symbol with linked F\&O.
2. Configure Display Settings – Choose whether to show lot size, margin, or both, and place the info table where you prefer.
3. Adjust Fallback Margin % – If you trade less common contracts, set your default margin % to reflect your broker’s requirement.
4. Enable Debug Mode (Optional) – To see the exact symbol source the script is using.
---
### Best For
* Intraday & Positional F\&O Traders who need instant clarity on lot size and margin before entering trades.
* Options Sellers & Buyers who want quick cost estimates.
* Traders Switching Symbols Quickly — saves time by removing the need to check the broker’s margin sheet manually.
---
💡 Pro Tip: Since margin requirements can change, keep the script updated whenever your broker revises margin data. This version’s margin table is updated as of 13-08-2025.
Volume Delta Pressure Tracker by GSK-VIZAG-AP-INDIA📢 Title:
Volume Delta Pressure Tracker by GSK-VIZAG-AP-INDIA
📝 Short Description (for script title box):
Real-time volume pressure tracker with estimated Buy/Sell volumes and Delta visualization in an Indian-friendly format (K, L, Cr).
📃 Full Description
🔍 Overview:
This indicator estimates buy and sell volumes using candle structure (OHLC) and displays a real-time delta table for the last N candles. It provides traders with a quick view of volume imbalance (pressure) — often indicating strength behind price moves.
📊 Features:
📈 Buy/Sell Volume Estimation using the candle’s OHLC and Volume.
⚖️ Delta Calculation (Buy Vol - Sell Vol) to detect pressure zones.
📅 Time-stamped Table displaying:
Time (HH:MM)
Buy Volume (Green)
Sell Volume (Red)
Delta (Color-coded)
🔢 Indian Number Format (K = Thousands, L = Lakhs, Cr = Crores).
🧠 Fully auto-calculated — no need for tick-by-tick bid/ask feed.
📍 Neatly placed bottom-right table, customizable number of rows.
🛠️ Inputs:
Show Table: Toggle the table on/off
Number of Bars to Show: Choose how many recent candles to include (5–50)
🎯 Use Cases:
Identify hidden buyer/seller strength
Detect volume absorption or exhaustion
✅ Compatibility:
Works on any timeframe
Ideal for intraday instruments like NIFTY, BANKNIFTY, etc.
Ideal for volume-based strategy confirmation.
🖋️ Developed by:
GSK-VIZAG-AP-INDIA
Consensus Signal Matrix Pro [By TraderMan] Consensus Signal Matrix Pro 🌟
What Does It Do? 📊
Consensus Signal Matrix Pro is a comprehensive technical analysis indicator designed for financial markets. 🧠 It aggregates signals from over 30 popular technical indicators (e.g., EMA, RSI, MACD, Bollinger Bands, Supertrend, Ichimoku, etc.) to provide a unified BUY, SELL, or NEUTRAL recommendation. 💡 This tool helps traders make informed decisions by consolidating signals and presenting them in a clear table format. 📈 It is particularly suited for leveraged trading (without built-in TP/SL). 🚀
How Does It Work? 🔍
Multi-Indicator Analysis 🛠️:
The indicator calculates signals from 30 different technical indicators (e.g., EMA 9/21, RSI, MACD, Supertrend, Ichimoku, Williams %R, etc.).
Each indicator generates a BUY, SELL, or NEUTRAL signal based on price action and volume data.
For example: RSI < 30 triggers a "BUY" signal, while RSI > 70 triggers a "SELL" signal. 🔔
Signal Aggregation and Consensus 🤝:
All indicator signals are collected into an array.
The number of BUY, SELL, and NEUTRAL signals is counted.
A percentage difference (percentDiff) is calculated by dividing the difference between BUY and SELL signals by the total number of indicators.
Based on this difference:
>20%: General status is GENERAL BUY. ✅
<-20%: General status is GENERAL SELL. ❎
In between: General status is NEUTRAL. ⚖️
Position Recommendation 💸:
The position type is determined based on the general status:
GENERAL BUY → LONG position recommended. 📈
GENERAL SELL → SHORT position recommended. 📉
NEUTRAL → No position (NONE). 🚫
Table Visualization 📋:
The indicator displays all signals and the general status in a table located in the top-right corner of the TradingView chart. 🎨
The table lists each indicator’s name, its signal (BUY/SELL/NEUTRAL), total indicator count, BUY/SELL/NEUTRAL counts, general status, and position type. 🖼️
Color coding is used: Green (BUY), Red (SELL), Gray (NEUTRAL), Orange (headers). 🌈
How to Use It? 🛠️
Setup ⚙️:
Copy and paste the indicator code into the Pine Editor on TradingView and compile it. 🖥️
Add it to your chart (works on any timeframe, though it uses D1 data for daily ATR). ⏰
Review the Table 📖:
Check the table displayed in the top-right corner of the chart.
Review each indicator’s signal (BUY/SELL/NEUTRAL) and the overall signal distribution.
Focus on the GENERAL STATUS and POSITION TYPE rows. 🔎
Position Opening Decision 💰:
LONG Position: If GENERAL STATUS is "GENERAL BUY" and the table shows mostly green (BUY) signals, consider opening a LONG position. 📈
SHORT Position: If GENERAL STATUS is "GENERAL SELL" and the table shows mostly red (SELL) signals, consider opening a SHORT position. 📉
NEUTRAL Status: If the status is "NEUTRAL," avoid opening a position. ⚖️
Risk Management ⚠️:
The indicator does not include Take Profit (TP) or Stop Loss (SL) levels. You must apply your own risk management strategy.
Recommended: Use ATR-based volatility (shown in the table as ATR signal) or support/resistance levels to set manual TP/SL. 🛡️
Timeframe and Asset ⏳:
Can be used on any financial asset (stocks, forex, crypto, etc.).
Works on short-term (1H, 4H) or long-term (D1, W1) charts. Evaluate signal speed based on your timeframe. 📅
How to Open Positions? 🎯
Trust the General Status: Use GENERAL STATUS (GENERAL BUY or GENERAL SELL) as the primary guide. A strong percentage difference (>20% or <-20%) indicates a more reliable signal. ✅
Check Signal Strength: Look at the table to assess the number of BUY or SELL signals. For example, if 20 out of 30 indicators signal BUY, it’s a strong LONG signal. 💪
Align with Market Conditions: Before acting, analyze the broader market trend (bullish, bearish, or sideways). For instance, SELL signals may be less reliable in a strong bull market. 📡
Combine with Other Analyses: Use the indicator alongside support/resistance levels, news flow, or fundamental analysis for confirmation. 🧩
Caution: The indicator is designed for leveraged trading but lacks TP/SL. Manage volatility and risk tolerance carefully. ⚠️
Advantages and Considerations 🌟
Advantages 😊:
Simplifies analysis by combining multiple indicators into one table.
Provides a quick overview of market direction.
User-friendly for both beginners and experienced traders.
Considerations ⚠️:
No signal is 100% accurate; markets can be unpredictable.
You must develop your own risk management strategy.
Signals may be misleading during high volatility; use additional confirmation.
Final Note 🎉:
Consensus Signal Matrix Pro is a powerful tool for traders seeking a consolidated view of multiple technical signals. 🚀 By combining diverse indicators into a single, easy-to-read table, it streamlines decision-making. However, always combine it with sound risk management and market context for the best results. 💸 Happy trading! 🤑
📱 Mobile EMA + Trendline Bias (edegrano)📱 Mobile EMA + Trendline Bias (edegrano) — User Manual
What It Does
This indicator helps you spot strong bullish or bearish trends by combining:
EMA Bias: Using the relationship between EMA 50 and EMA 200 on your chosen timeframe.
Trendline Slope Bias: Using linear regression trendlines on fixed 1-minute, 3-minute, and 5-minute charts.
Signal Dots: Visual buy/sell signals limited to the first 3 occurrences after the last opposite signal to avoid noise.
Summary Table: Shows the current trend bias and final suggestion.
EMA Plots: Shows EMA 50, EMA 100, and EMA 200 lines on your chart.
Tag Label: Displays a small signature tag “📱 edegrano Mobile” on the chart.
Inputs
Input Name Description Default Notes
Custom EMA Timeframe (userTF) Timeframe used to calculate EMAs "1" (1 min) Choose your preferred timeframe (e.g., 1, 3, 5, 15, 60 minutes, etc.)
Show EMAs on Chart (showEMA) Toggle EMA lines visibility true Show or hide EMA 50, 100, and 200 lines
Linear Regression Length (regLen) Length of bars used in regression 20 Adjusts sensitivity of regression trendlines (lower = more responsive)
Show EMA Bias Row (showRowEMA50) Show/hide EMA bias row in the table true Display the EMA 50 > EMA 200 bias status in table
Show Trendline Bias Row (showRowTrend) Show/hide trendline slope row in table true Display the trendline slope bias status in table
How to Use
Set Your Timeframe:
Choose the timeframe for EMA calculations (userTF) depending on your trading style.
Scalpers might use 1-5 minute charts.
Day traders might choose 5-30 minutes.
Swing traders could go 1 hour or more.
Watch the EMA Lines:
EMA 50 (blue), EMA 100 (black), and EMA 200 (red) are plotted on your chart.
These lines help you visualize trend direction and momentum.
Understand the Bias Conditions:
EMA Bias:
Bullish: EMA 50 > EMA 200
Bearish: EMA 50 < EMA 200
Trendline Slope Bias:
Calculated on fixed 1m, 3m, and 5m charts.
Bullish if slope of all 3 regression lines is up (current value > previous).
Bearish if slope of all 3 regression lines is down.
Look for Signal Dots:
Green (lime) dots below bars: Strong Buy signals (first 3 occurrences only after last sell).
Red dots above bars: Strong Sell signals (first 3 occurrences only after last buy).
This limitation helps reduce noise from too many signals.
Check the Table (Bottom Left):
Shows EMA bias and trendline slope status.
Displays overall final suggestion:
Strong Buy 💎
Strong Sell 💎
Mixed / Neutral
Tag Label:
A small label "📱 edegrano Mobile" appears on the chart for easy identification.
Tips & Best Practices
Adjust Regression Length (regLen):
Lower values (e.g., 15-20) react faster but may generate false signals.
Higher values (30-50) smooth noise but react slower — better for longer-term trades.
Combine with Other Indicators:
Use volume, candlestick patterns, or support/resistance to confirm signals.
Don’t Trade Against the Signal:
Avoid entering buy trades during a “Strong Sell” phase and vice versa.
Monitor Multiple Timeframes:
Consider confirming trends on higher timeframes.
Parameter Suggestions by Trading Style
Style EMA Timeframe Regression Length (regLen)
Scalping 1 min 15 - 20
Day Trading 5 - 15 min 20 - 30
Swing Trading 1 hour or higher 30 - 50
Position Trading 4 hour, Daily, Weekly 50 - 100
EMA ZONE MASTER [By TraderMan]🟢 EMA Zone Master Indicator Explanation 🚀
🌟 What is the EMA Zone Master?
The EMA Zone Master is a powerful TradingView Pine Script indicator designed to help traders identify trends, entry points, and manage trades with precision. It leverages a 200-period EMA (Exponential Moving Average) to create a dynamic zone for spotting bullish 📈 and bearish 📉 trends. The indicator provides clear buy/sell signals, take-profit (TP) levels, and stop-loss (SL) levels, making it ideal for both novice and experienced traders! 💪
🔍 How Does It Work?
The indicator uses the 200-period EMA as its core, surrounded by a zone defined by a percentage offset (default 0.3%). Here's how it operates:
Trend Detection 🧠:
The price's position relative to the EMA zone determines the trend:
Above the zone (with tolerance and minimum distance) signals a bullish trend (BUY 📈).
Below the zone signals a bearish trend (SELL 📉).
A neutral trend occurs when the price is within the zone or lacks momentum.
A trend is confirmed after a set number of bars (default 3) to filter out noise. 🔎
Trade Signals 🚦:
Buy Signal: Triggered when the price breaks above the EMA zone with confirmation.
Sell Signal: Triggered when the price breaks below the EMA zone with confirmation.
Signals are visualized with labels ("BUY" or "SELL") on the chart for clarity. ✅
Position Management 🎯:
Entry Price: Set at the closing price when a signal is triggered.
Take-Profit Levels: Three TP levels (TP1, TP2, TP3) are calculated based on a Risk/Reward Ratio (default 0.7).
Stop-Loss: Calculated using the ATR (Average True Range) with a multiplier (default 6.0) for volatility-based protection. 🛡️
Lines and labels for entry, TP, and SL are drawn on the chart for easy tracking.
Trend Strength 💪:
The indicator calculates trend strength (0-100%) and categorizes it as Very Strong, Strong, Moderate, Weak, or Very Weak. This helps gauge the reliability of the trend. 🌡
Analysis Comment 📝:
A dynamic comment provides professional insights based on trend strength, guiding traders on whether to act or wait. 🧑💼
Visuals & Alerts 🔔:
The EMA, zone boundaries, and candlestick colors change based on the trend (green for bullish, red for bearish, gray for neutral).
A table in the top-right corner summarizes key data: trend direction, strength, entry price, TP/SL levels, and success rate.
Alerts are generated with detailed trade information when a new signal appears.
🛠 How to Use It?
Setup on TradingView ⚙️:
Add the EMA Zone Master to your chart via the TradingView Pine Script editor.
Customize settings like EMA Length (default 200), Zone Width (0.3%), ATR Period (50), and Risk/Reward Ratio (0.7) to suit your trading style. 🛠
Interpreting Signals 📊:
Buy Signal (AL): Look for a "BUY" label and green candlesticks when the price breaks above the EMA zone. 📈
Sell Signal (SAT): Look for a "SELL" label and red candlesticks when the price breaks below the EMA zone. 📉
Check the table for trend strength and analysis comments to confirm the signal's reliability.
Opening a Position 💸:
Long Position: Enter a buy trade when a "BUY" signal appears. Set your take-profit at TP1, TP2, or TP3 and stop-loss at the SL level shown on the chart.
Short Position: Enter a sell trade when a "SELL" signal appears. Use the TP and SL levels provided.
The indicator automatically plots these levels as lines and labels for easy reference. 🎯
Managing Trades 🕒:
Monitor the trade's progress via the table and labels.
The indicator tracks if TP1, TP2, or TP3 is hit or if the trade stops out, updating the Last Result in the table (e.g., "✅ TP1 SUCCESS" or "❌ STOPPED OUT").
Use the Success Rate (displayed in the table) to gauge historical performance (75% for BUY, 65% for SELL, 50% for NEUTRAL).
Using Alerts 🔔:
Set up alerts in TradingView to receive notifications when a buy or sell signal is triggered.
The alert message includes the trend, strength, entry price, TP/SL levels, success rate, and analysis comment for quick decision-making.
📈 How to Open a Position?
Wait for a Signal: Ensure a "BUY" or "SELL" label appears, and the trend strength is at least Moderate (40%+) for higher confidence. ✅
Check the Table: Review the trend direction, strength, and analysis comment to confirm the trade setup. 📊
Enter the Trade:
For a Buy: Enter at the entry price shown, set TP1/TP2/TP3 and SL as indicated by the lines/labels.
For a Sell: Same process, but for a short position.
Monitor: Watch for TP or SL hits. The indicator will update the table with the result (e.g., "✅ TP3 SUCCESS"). 🕒
Risk Management: Always adhere to the stop-loss level to limit losses, and consider partial profit-taking at TP1 or TP2 for safer trading. 🛡️
🎉 Why Use EMA Zone Master?
Clear Signals: Easy-to-read buy/sell signals with visual cues. 🚦
Automated Levels: Pre-calculated TP and SL levels save time and reduce errors. 🧮
Trend Strength Insight: Helps avoid weak trends and focus on high-probability setups. 💪
Professional Analysis: Dynamic comments guide your trading decisions. 🧑💼
Customizable: Adjust settings to match your trading style or market conditions. ⚙️
Alert System: Stay informed with detailed alerts for timely action. 🔔
⚠️ Tips for Success
Confirm with Other Tools: Use additional indicators (e.g., RSI, MACD) to validate signals. 🔍
Test First: Backtest the indicator on your preferred market/timeframe to understand its performance. 📉
Risk Management: Always use proper position sizing and respect stop-loss levels. 🛑
Higher Timeframes: The indicator works best on higher timeframes (e.g.,15MİN, 1H, 4H, Daily) for stronger signals. ⏰
Happy trading with EMA Zone Master! 🚀 Let it guide you to smarter, more confident trades. 💰 Feel free to tweak settings and share your results! 😊
IB with Range PercentageThis Pine Script indicator for TradingView combines several powerful technical analysis tools to give traders a comprehensive view of market action:
Inside Bar Detection: Identifies the classic inside bar candlestick pattern.
Moving Averages: Provides multiple moving averages to help determine trend and potential support/resistance levels.
Information Table: Displays key market data in a concise table format.
1. Inside Bar Detection and Range
The indicator marks inside bars on the chart. An inside bar is a candlestick where its entire range (high and low) falls within the range of the preceding candlestick (often called the "mother bar"). This pattern often signifies market consolidation or indecision.
Customizable Marking: Users can choose the shape and color used to mark the inside bars, such as triangles, squares, or circles.
Range Percentage: A label shows the range of the inside bar as a percentage of the previous bar's low, providing a quantitative measure of its size.
Time Restriction: A setting allows displaying inside bars only for a specified number of past days, focusing analysis on recent price action.
Customizable Label Size: Users can choose the size of the range percentage label for optimal visibility.
2. Moving Averages for Trend Analysis
The indicator can plot up to four moving averages (MAs) on the chart. Moving averages smooth out price data to help identify trends and potential support and resistance levels.
User-Selectable MA Type: For each MA, traders can choose between Simple Moving Average (SMA) or Exponential Moving Average (EMA).
Customizable Length: Users can specify the length (number of periods) for each MA, such as 20, 50, 100, or 200.
Customizable Color: Each MA's line color can be chosen to suit personal preferences.
Trend Identification: When the price is above an MA, it suggests an uptrend, while prices below suggest a downtrend. The slope of the MA also indicates trend momentum.
3. Information Table for Key Data
A customizable information table is displayed on the chart, providing a quick overview of important market data.
Average Daily Range (ADR) Percentage: Shows the average daily range of the asset as a percentage, reflecting its historical volatility.
Distance from EMAs: Displays how far the current price is from the 10, 20, and 50 period Exponential Moving Averages. A positive percentage indicates the price is above the MA, while a negative percentage means it's below.
Customizable Table Elements: Users can choose the table's background color, text color, and text size for optimal readability.
How to Use This Indicator:
This indicator can be a valuable tool for traders using technical analysis:
Inside Bar Breakouts: Inside bars often precede breakouts. Traders can use the inside bar markings and range percentage to identify potential breakout opportunities.
Confirmation of Trends: Moving averages help confirm the direction of the trend, enabling traders to align their inside bar strategies with the prevailing market direction.
Support and Resistance: Moving averages can act as dynamic support and resistance levels. Traders can look for inside bars forming near these levels as potential entry or exit points.
Volatility and Range Analysis: The ADR percentage helps assess the normal daily range of an asset, which can be useful for setting realistic price targets and managing risk.
Risk Management: The distance from EMAs can alert traders to potential overextended moves, providing information for setting stop-loss or take-profit levels.
By combining these elements, this indicator provides a layered approach to market analysis, allowing traders to identify potential trading opportunities and manage risk effectively based on both candlestick patterns and trend-following indicators. Remember that no indicator guarantees success, and it's essential to use this tool in conjunction with other analysis techniques and proper risk management practices.
BB Opening Range
Master session-based trading with precision range analysis and dynamic extensions
📊 Overview
The BB Opening Range Indicator is a comprehensive session analysis tool that captures, visualizes, and extends price ranges for any defined trading session. Whether you're tracking overnight ranges, opening ranges, or custom session periods, this indicator provides institutional-grade visualization with intelligent range extensions and detailed quadrant analysis.
🎯 Key Features
Dynamic Session Tracking
Define custom session times (default: Midnight 00:00-00:30)
Automatic timezone adjustment for precise session detection
Handles sessions that cross midnight seamlessly
Visual session start/end markers with customizable lines
Intelligent Range Extension
Futures Close (17:00) - Extends ranges until 5:00 PM ET
End of Week - Maintains ranges through Friday close
Always - Continuous extension for persistent levels
Session End Only - Basic range without extension
Advanced Quadrant Analysis
Automatically divides ranges into four equal zones (0-25%, 25-50%, 50-75%, 75-100%)
Color-coded quadrants for instant visual reference
Optional quadrant border lines at 25%, 50%, and 75% levels
Customizable colors and opacity for each quadrant
Historical Range Analytics
Tracks multiple historical ranges (configurable 1-50)
Calculates average range size over customizable lookback period (up to 200 days)
Compares current range to historical average
Maintains clean chart with automatic old range cleanup
Professional Visualization
Clean, institutional-style range boxes with customizable borders
Opening price line overlay
Optional info table showing key levels and statistics
Smart label positioning that follows price action
Predictive next session indicator
📈 Use Cases
Opening Range Breakout Trading
Track the first 30-60 minutes of regular trading hours to identify key support/resistance levels for the day.
Overnight Range Analysis
Monitor overnight/globex sessions to gauge pre-market sentiment and identify potential gaps.
Custom Session Ranges
Define any time period relevant to your strategy - London open, New York open, Asian session, or custom intervals.
Multi-Timeframe Analysis
View how price respects historical session ranges across different timeframes for confluence.
⚙️ Settings Guide
Session Settings
Session Name: Label your session for easy identification
Session Time: Define start and end times (24-hour format)
Extend Until: Choose how long ranges remain visible
Lookback Days: Period for calculating average range size
Max Ranges: Number of historical ranges to display
Display Options
Show Quadrants: Toggle quadrant visualization
Show Info Table: Display statistics table
Table Position: Choose table location on chart
Session Lines: Show/hide session start and next session markers
Open Price Line: Display opening price within range
Label Settings
High/Low Labels: Show range extremes
Quadrant Labels: Display 25%, 50%, 75% levels
Open Price Label: Mark session opening price
Current Range Only: Limit labels to most recent range
Visual Styling
Border Settings: Customize box and quadrant borders
Line Widths: Adjust border and quadrant line thickness
Color Scheme: Full control over all visual elements
PipsHunters Trading ChecklistTitle: PipsHunters Trading Checklist (PHTC)
Short Description / Teaser:
Enforce trading discipline and never miss a step in your pre-trade analysis with this simple, interactive, on-chart checklist.
Full Description:
🚀 Overview
The PipsHunters Trading Checklist (PHTC) is a powerful yet simple tool designed to instill discipline and structure into your trading routine. In the heat of the moment, it's easy to forget crucial steps of your analysis, leading to impulsive and low-probability trades. This indicator acts as your personal co-pilot, providing a persistent, on-chart checklist that you must manually complete before taking a trade.
This is not an automated signal generator. It is a utility to keep you accountable to your own trading plan. The checklist items are inspired by common concepts in price action and Smart Money Concepts (SMC) methodologies, but they serve any trader who follows a rule-based system.
✨ Key Features
Interactive On-Chart Table: Displays a clean, non-intrusive table directly on your chart.
Manual Check-off System: You are in full control. Go into the indicator settings and check off each item as you complete your analysis.
Real-Time Progress Tracking: The table header shows your progress (e.g., 4/7) and changes color from red to green when all items are checked.
Clear Visual Cues: Each item is marked with a ✅ or ❌, and the text color changes to provide an at-a-glance status.
"Ready!" Status: A final "READY!" confirmation appears once your entire checklist is complete, giving you the green light to look for an entry based on your strategy.
Fully Customizable Position: Place the table in any corner of your chart (Top Left, Top Right, Bottom Left, Bottom Right) to suit your layout.
📋 The Checklist Items Explained
The default checklist guides you through a structured, top-down analysis process common in many trading strategies:
Seat before 1H: A reminder to be settled and mentally prepared at your desk at least an hour before your target session begins. Avoids rushing and emotional decisions.
Check News: Have you checked for high-impact news events that could introduce extreme volatility and invalidate your setup?
Mark Day Open: The daily open is a key institutional level. Marking it helps establish the daily bias.
Mark LQ Levels: Have you identified key Liquidity (LQ) levels? This includes previous day/week highs and lows, session highs/lows, and other obvious swing points.
Wait for Kill Zone: A reminder to be patient and wait for price to trade into a specific, high-probability time window (e.g., London Kill Zone, New York Kill Zone).
LQ sweep inside Kill Zone: The core of the setup. Has price swept a key liquidity level within your chosen Kill Zone?
Lower TF Confirmations: After the liquidity sweep, have you waited for confirmation on a lower timeframe? This is often a Market Structure Shift (MSS) or Change of Character (CHoCH).
🛠️ How to Use
Add the "PipsHunters Trading Checklist" indicator to your chart.
Go to the indicator's Settings (click the gear icon ⚙️).
As you perform each step of your pre-trade analysis, tick the corresponding checkbox in the Inputs tab.
The on-chart table will update instantly to reflect your progress.
Only when all 7 items are checked will the table signal "READY!".
🎯 Who Is This For?
This indicator is perfect for:
SMC / ICT Traders: The checklist items align directly with Smart Money Concepts.
New Traders: Helps build the essential habit of a consistent pre-trade routine.
Inconsistent Traders: Acts as a guardrail to prevent impulsive, undisciplined entries.
Any Rule-Based Trader: Anyone who follows a trading plan can benefit from the structure it provides.
Disclaimer: This is a utility tool to aid in discipline and execution. It does not provide financial advice or guarantee profitable trades. All trading involves risk, and you are solely responsible for your own decisions. Trade safe and stay disciplined!
Crypto Volatility Panel ProCrypto Volatility Panel Pro
This advanced indicator creates a comprehensive volatility monitoring dashboard that displays real-time volatility metrics for up to 30 cryptocurrency pairs simultaneously. The tool combines sophisticated volatility assessment techniques with leverage-adjusted analysis and heat map visualization to provide enhanced market insights in an organized table format.
Proprietary Methodology
This indicator utilizes a proprietary dual-metric volatility assessment system developed specifically for cryptocurrency market analysis. The methodology combines advanced technical analysis components including price volatility measurements, range position analysis, and leverage scaling algorithms optimized through extensive market testing.
The unique approach enables more accurate volatility assessments across diverse cryptocurrency price ranges and market conditions compared to standard volatility indicators. Specific calculation methods and optimization parameters remain proprietary to maintain competitive advantages.
Core Functionality and Innovation
Unlike standard volatility indicators that focus on single instruments, this tool provides simultaneous multi-asset monitoring with proprietary volatility calculations specifically optimized for cryptocurrency markets. The innovation lies in combining multiple volatility assessment techniques with enhanced leverage scaling algorithms, heat map ranking system, and comprehensive multi-asset dashboard presentation.
The indicator processes data from up to 30 different cryptocurrency pairs, each with independent leverage settings ranging from 0.1x to 10,000x. Users can apply universal leverage across all pairs for consistent analysis scenarios, or customize individual leverage ratios for specific trading strategies.
Visual Organization and Heat Map System
The table displays three primary columns with an advanced heat map ranking system:
Symbol Column: Shows cryptocurrency pair names with dynamic visual indicators (🔥, ⚡, ✅, 💤) representing volatility intensity levels. Each symbol includes its current leverage setting in parentheses for reference. Invalid or unavailable symbols display error indicators (❌) with appropriate error messaging.
Change Percentage Column: Displays leverage-adjusted volatility measurements with both color-coded text and heat map background ranking. Text colors indicate volatility levels (Red for extreme, Yellow for high, Green for moderate, Gray for low), while background heat map colors rank performance relative to all monitored pairs.
Lookback Percentage Column: Shows leverage-adjusted position analysis within recent price ranges with heat map background ranking, indicating market positioning relative to recent highs and lows across all monitored instruments.
Advanced Heat Map Ranking
The proprietary heat map system ranks all enabled pairs in real-time based on their volatility metrics, providing instant visual identification of the most and least volatile instruments:
Hottest (Top 10%): Deep red background indicating highest volatility
Warm (10-20%): Orange-red background for elevated volatility
Medium (20-40%): Yellow background for moderate-high volatility
Cool (40-60%): Green background for moderate volatility
Cold (60-80%): Blue background for low volatility
Sleepy (Bottom 20%): Dark background for minimal volatility
Heat map opacity is fully customizable, and the system can be disabled for users preferring traditional static backgrounds.
Configuration Options
Expanded Pair Selection: Monitor up to 30 cryptocurrency pairs across major exchanges including Bitstamp and Binance. Default selections include established cryptocurrencies (BTC, ETH, SOL) and emerging assets (INJ, NEAR, FTM), with full customization available.
Table Positioning: Nine position options including top/middle/bottom combinations with left/center/right alignment, allowing optimal placement on any chart layout without interfering with price action or other indicators.
Visual Customization: Comprehensive control over table dimensions, frame width, font size, background colors, frame colors, header styling, text colors, and heat map color schemes to match user preferences and chart themes.
Leverage Management: Individual leverage settings for each of the 30 pairs, with optional universal leverage mode that applies consistent multipliers across all enabled pairs. Supports extreme leverage ranges up to 10,000x for advanced risk modelling.
Error Handling: Robust symbol validation with clear error indicators for invalid, unavailable, or misconfigured trading pairs, ensuring reliable operation across different market conditions.
Practical Trading Applications
Multi-Asset Volatility Screening: Identify the most and least volatile cryptocurrency markets in real-time using the heat map ranking system, enabling quick allocation of attention to instruments with the highest potential for profitable moves.
Leverage Risk Assessment: Visualize how different leverage ratios amplify volatility metrics across multiple markets simultaneously, supporting informed position sizing decisions before entering leveraged trades.
Market Timing and Rotation: Use the combination of volatility measurements and heat map rankings to identify optimal entry/exit timing across cryptocurrency markets, facilitating effective portfolio rotation strategies.
Portfolio Diversification: Compare volatility levels and rankings across 30 cryptocurrencies to construct portfolios with desired risk characteristics, balancing high-volatility growth opportunities with stable store-of-value positions.
Risk Management Dashboard: Monitor real-time volatility changes and relative rankings to adjust position sizes, implement protective measures, or reallocate capital when market conditions change significantly.
Technical Implementation
Built using Pine Script v5 with optimized security request handling to minimize performance impact while accessing 30 external data sources simultaneously. The indicator uses efficient array-based data collection, real-time ranking algorithms, and conditional table updates to maintain smooth chart operation.
The heat map system employs dynamic ranking calculations that process all enabled pairs in real-time, sorting values and applying percentile-based color mapping for instant visual feedback. Error handling includes invalid symbol detection and graceful fallback display for unavailable data feeds.
Usage Instructions
Configure Pair Selection: Enable desired cryptocurrency pairs from the 30 available options, organized across three input groups for easy navigation. Set individual leverage values or activate universal leverage mode for consistent multipliers.
Customize Heat Map: Adjust heat map colors and opacity to match your visual preferences and chart theme. The system can be disabled for users preferring static backgrounds.
Position and Style Table: Select optimal table position from nine available options and customize appearance including colors, sizing, and text elements to integrate seamlessly with your trading setup.
Interpret Rankings: Monitor both absolute values and heat map rankings to identify relative performance.
Hottest colors indicate pairs experiencing the highest volatility relative to the monitored universe.
Apply Leverage Context: Use leverage-adjusted values to understand how volatility would affect leveraged positions, remembering these are mathematical projections designed for risk assessment rather than trading signals.
Advanced Features
Dynamic Symbol Processing: The indicator automatically handles symbol validation, displaying clear error messages for invalid or unavailable trading pairs while maintaining operation for valid symbols.
Real-Time Ranking: Heat map colors update dynamically as market conditions change, providing instant visual feedback on shifting volatility patterns across the cryptocurrency universe.
Scalable Monitoring: Users can monitor anywhere from a few key pairs to the full 30-pair universe, with the ranking system automatically adjusting to the number of enabled instruments.
Cross-Exchange Support: Incorporates data from multiple cryptocurrency exchanges to provide comprehensive market coverage and reduce single-source dependency risks.
Limitations and Important Considerations
Proprietary Algorithm: The specific calculation methods are proprietary and not disclosed. Users should evaluate the indicator's output through their own analysis and testing before incorporating it into trading decisions.
Complex Volatility Model: While the proprietary methodology is sophisticated, it represents one approach to volatility assessment and may not capture all forms of market volatility such as gap movements, flash crashes, or news-driven events.
Performance Considerations: Processing data from up to 30 external securities may impact chart loading speed or cause timeouts during periods of high TradingView server load. Users experiencing performance issues should consider reducing the number of enabled pairs.
Leverage Calculations: Leverage adjustments are mathematical projections that assume linear scaling, which may not reflect actual leveraged trading mechanics including margin requirements, funding costs, liquidation risks, and exchange-specific policies.
Market Data Dependencies: Cryptocurrency prices and volatility can vary significantly between exchanges. The indicator's data sources may not represent the specific exchange or trading pair you use, and some feeds may experience gaps or delays during maintenance periods.
Ranking Relativity: Heat map rankings are relative to the enabled pair universe. Rankings will change based on which pairs are monitored and their current market conditions, making absolute interpretations less meaningful than relative comparisons.
Educational Value
This indicator helps traders develop understanding of relative volatility patterns across cryptocurrency markets and the mathematical impact of leverage on risk metrics. The heat map system provides intuitive visualization of market dynamics, helping users identify which assets are experiencing unusual activity relative to their peers.
The tool serves as an educational platform for understanding advanced volatility measurement techniques, relative ranking systems, and multi-asset risk assessment concepts that are crucial for professional cryptocurrency trading and portfolio management.
Performance and Compatibility
The indicator is optimized for cryptocurrency markets but can be adapted to other volatile asset classes by modifying the symbol inputs. Security request limits may occasionally affect data availability, particularly when multiple indicators requesting external data are used simultaneously on the same chart.
The heat map rendering system is designed for efficiency, updating color mappings only when ranking changes occur rather than on every price tick, ensuring smooth chart performance even when monitoring the full 30-pair universe.
Risk Disclaimer: This indicator is designed for educational and analytical purposes only. Volatility calculations are estimates based on historical price data and proprietary mathematical models that are not disclosed. Results do not constitute trading advice or predictions of future price movements. Users should conduct independent analysis to evaluate the indicator's effectiveness before making trading decisions.
Leveraged trading involves substantial risk of loss and may not be suitable for all investors. Always conduct thorough research and consider consulting with qualified financial professionals before making leveraged trading decisions. Cryptocurrency markets are highly volatile and can result in significant losses. Past volatility patterns do not guarantee future market behavior.
This indicator is compatible with all TradingView chart types and timeframes. It is specifically designed for cryptocurrency markets using proprietary algorithms optimized for digital asset volatility characteristics.
ATR Plots + OverlayATR Plots + Overlay
This tool calculates and displays Average True Range (ATR)-based levels on your chart for any selected timeframe, giving traders a quick visual reference for expected price movement relative to the most recent bar’s open price. It plots guide levels above and below that open and shows how much of the typical ATR-based range has already been covered—all in one interactive table and on-chart overlay.
What It Does
ATR Calculation:
Uses true range data over a user-defined period (default 14), smoothed via RMA, SMA, EMA, or WMA, on the selected timeframe (e.g., 1h, 4h, daily) to calculate the ATR value.
Projected Levels:
Plots four reference levels relative to the open price of the most recent bar on the chosen timeframe:
+100% ATR: Open + ATR
+50% ATR: Open + 50% of ATR
−50% ATR: Open − 50% of ATR
−100% ATR: Open − ATR
Coverage %:
Tracks high and low prices for the current session on the selected timeframe and calculates what percentage of the ATR has already been covered:
Coverage % = (High − Low) ÷ ATR × 100
Interactive Table:
Shows the ATR value and current coverage percentage in a customizable table overlay. Position, color scheme, borders, transparency, and an optional empty top row are all adjustable via settings.
Customization Options
Table Settings:
Position the table (top/bottom × left/right).
Customize background color, text color, border color, and thickness.
Optionally add an empty top row for spacing.
Line Settings:
Choose color, line style (solid/dotted/dashed), and width.
Lines automatically update with each new bar on the selected timeframe, anchored to that bar’s open price.
General Inputs:
ATR length (number of bars).
Smoothing method (RMA, SMA, EMA, WMA).
Timeframe selection for ATR calculations (e.g., 15m, 1h, Daily).
How to Use It for Trading
Measure Volatility: Quickly gauge the expected price movement based on ATR for any timeframe.
Identify Overextension: Use the coverage % to see how much of the expected ATR range is already consumed.
Plan Entries & Exits: Align trade targets and stops with ATR levels for more objective planning.
Visual Reference: Horizontal guide lines and table update automatically as new bars form, keeping information clear and actionable.
Ideal For
Intraday traders using ATR levels to frame trades.
Swing traders wanting ATR-based reference points for larger timeframes.
Anyone seeking a volatility-based framework for planning stops, targets, or identifying overextended conditions.